[ https://issues.apache.org/jira/browse/HDFS-2834?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13223023#comment-13223023 ]
dhruba borthakur commented on HDFS-2834: ---------------------------------------- In our own variant of hdfs, we have introduced a scatter-gather api in FSDataInputStream: {code} public List<ByteBuffer> readFullyScatterGather(long position, int length) throws IOException { return ((PositionedReadable)in).readFullyScatterGather(position, length); } {code} This allows HDFS to return ByteBuffers all the way to the application. The above api, in turn, invokes DFSClient.InputStream: {code} /** * Read bytes starting from the specified position. This is optimized * for fast preads from an application with minimum of buffer copies. * * @param position start read from this position * @param length number of bytes to read * * @return A list of Byte Buffers that represent all the data that was * read from the underlying system. */ @Override public List<ByteBuffer> readFullyScatterGather(long position, int length) throws IOException { {code} Some details here: http://bit.ly/zyDF0h > ByteBuffer-based read API for DFSInputStream > -------------------------------------------- > > Key: HDFS-2834 > URL: https://issues.apache.org/jira/browse/HDFS-2834 > Project: Hadoop HDFS > Issue Type: Improvement > Reporter: Henry Robinson > Assignee: Henry Robinson > Attachments: HDFS-2834-no-common.patch, HDFS-2834.3.patch, > HDFS-2834.4.patch, HDFS-2834.5.patch, HDFS-2834.6.patch, HDFS-2834.patch, > HDFS-2834.patch, hdfs-2834-libhdfs-benchmark.png > > > The {{DFSInputStream}} read-path always copies bytes into a JVM-allocated > {{byte[]}}. Although for many clients this is desired behaviour, in certain > situations, such as native-reads through libhdfs, this imposes an extra copy > penalty since the {{byte[]}} needs to be copied out again into a natively > readable memory area. > For these cases, it would be preferable to allow the client to supply its own > buffer, wrapped in a {{ByteBuffer}}, to avoid that final copy overhead. -- This message is automatically generated by JIRA. If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa For more information on JIRA, see: http://www.atlassian.com/software/jira