共计 1090 个字符,预计需要花费 3 分钟才能阅读完成。
DFSInputStream 类共有三个 read 方法:
public synchronized int read(final ByteBuffer buf)
public synchronized int read(final byte buf[], int off, int len)
public int read(long position, byte[] buffer, int offset, int length)
最有吸引人的方法是第三个,支持部分读取 HDFS 文件,这是由于此类的父类实现了 Seekable, PositionedReadable 接口。
这里对第三个方法的参数加以解释:
position:针对指定 hdfs 文件的位置,开始从 position 读起;
offset:针对 buffer 而言,内容从 offset 开始填起,就是说 buffer 中的前(offset-1)的空间会空出来(不伤害之前填写的内容);
length:本次读取的长度(byte 单位),确保 offset+length <= buffer.size;
这里纠正一个习惯看法,之前一直说 block 是 Hadoop 的基本管理单元,很容易容易 hadoop 每次会把一整个块的数据读入内存。跟踪源码发现,hadoop 读入块信息,再根据具体的偏移信息读入相关的部分数据,而不是每次都机械的读入整个块。
相关阅读:
将本地文件拷到 HDFS 中 http://www.linuxidc.com/Linux/2013-05/83866.htm
从 HDFS 下载文件到本地 http://www.linuxidc.com/Linux/2012-11/74214.htm
将本地文件上传至 HDFS http://www.linuxidc.com/Linux/2012-11/74213.htm
HDFS 基本文件常用命令 http://www.linuxidc.com/Linux/2013-09/89658.htm
Hadoop 中 HDFS 和 MapReduce 节点基本简介 http://www.linuxidc.com/Linux/2013-09/89653.htm
《Hadoop 实战》中文版 + 英文文字版 + 源码【PDF】http://www.linuxidc.com/Linux/2012-10/71901.htm
Hadoop: The Definitive Guide【PDF 版】http://www.linuxidc.com/Linux/2012-01/51182.htm
更多 Hadoop 相关信息见 Hadoop 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=13