hadoop-mapreduce-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Tom White (JIRA)" <j...@apache.org>
Subject [jira] Commented: (MAPREDUCE-326) The lowest level map-reduce APIs should be byte oriented
Date Mon, 15 Feb 2010 19:05:28 GMT

    [ https://issues.apache.org/jira/browse/MAPREDUCE-326?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12833924#action_12833924

Tom White commented on MAPREDUCE-326:

[Chris] > Section 3.3- addressing backwards compatibility- actually *introduces a buffer
copy*, unless the serializers are backed by the output collector (which would make the call
to {{collect}} redundant).
[Arun] > This is completely unworkable, it adds an extra buffer copy from the map's <key,
value> into to the sort buffer (io.sort.mb) for the 'high-level' api.

The proposal does not introduce extra buffer copies. The example in section 3.3 is really
just a reorganization of the current code, since the serializers are constructed with DataOutputStream
objects - just as they are now. The point is that the serialization is moved out of the kernel.
There is no extra copying going on.

There is a mistake in the document - it should say RawMapOutputCollector takes DataOutputBuffer
(not DataInputBuffer), or better, DataOutputStream objects - sorry if this was misleading.

[Chris] > One can read directly from a stream into a byte-oriented record and "serialize"
that record into the MapOutputBuffer by a single buffer copy.
[Owen > Pipes *would* get much easier if it moved to the context object API. Moving to
Tom's API wouldn't help at all over the context object API.

This incurs an extra copy in the byte-oriented record (BytesWritable). In the case of Pipes,
for example, map outputs are read into a BytesWritable, which are then written to the MapOutputBuffer.
With a binary API it would be possible to bypass the BytesWritable and write directly into
the MapOutputBuffer.

[Arun] > I'm not sure I follow, what is the relation between MapOutputBuffer.collect and
IFile.append? Are you proposing we do away with the sort?

No, of course not. Keys and values sent to MapOutputBuffer.collect() ultimately find their
way to IFile.append() (in MapOutputBuffer's sortAndSpill() method). I'm just remarking that
these become binary level interfaces, so there are no generic types in these interfaces in
this proposal.

Perhaps the term "API" is causing confusion here. As I have said this is not intended for
users - it should really be viewed as an integration point for developers. This situation
is like the one for developers writing MapReduce schedulers. In this case the TaskScheduler
class is package private, so developers have to put their scheduler implementation into the
same package. For a binary layer, I am suggesting that we use the interface annotations to
achieve a similar effect, but without the limitation that their classes have to go in the
same package.

> The lowest level map-reduce APIs should be byte oriented
> --------------------------------------------------------
>                 Key: MAPREDUCE-326
>                 URL: https://issues.apache.org/jira/browse/MAPREDUCE-326
>             Project: Hadoop Map/Reduce
>          Issue Type: Improvement
>            Reporter: eric baldeschwieler
>         Attachments: MAPREDUCE-326-api.patch, MAPREDUCE-326.pdf
> As discussed here:
> https://issues.apache.org/jira/browse/HADOOP-1986#action_12551237
> The templates, serializers and other complexities that allow map-reduce to use arbitrary
types complicate the design and lead to lots of object creates and other overhead that a byte
oriented design would not suffer.  I believe the lowest level implementation of hadoop map-reduce
should have byte string oriented APIs (for keys and values).  This API would be more performant,
simpler and more easily cross language.
> The existing API could be maintained as a thin layer on top of the leaner API.

This message is automatically generated by JIRA.
You can reply to this email to add a comment to the issue online.

View raw message