HDFS缓冲写/读操作

时间:2015-05-29 08:21:23

标签: java hadoop hdfs

我正在使用HDFS Java API和FSDataOutput以及FSDataInput流将文件写入/读取到4台计算机的Hadoop 2.6.0群集中。

FS流实现有一个 bufferSize 构造函数参数,我假设它是用于流的内部缓存。但它似乎对写入/读取速度完全没有任何影响,无论其值如何(我尝试了8KB到几MB之间的值)。

我想知道是否有某种方法可以实现对HDFS群集的缓冲写入/读取,不同于将FSDataOutput / Input包装到BufferedOutput / Input流中?

1 个答案:

答案 0 :(得分:2)

我找到了答案。

FileSystem.create()的 bufferSize 参数实际上是 io.file.buffer.size ,我们可以从文档中读到:

"用于序列文件的缓冲区大小。此缓冲区的大小可能是硬件页面大小的倍数(在Intel x86上为4096),它决定了在读写操作期间缓冲的数据量。"

来自书" Hadoop:The Definitive Guide"我们可以读到一个好的起点是将其设置为128KB。

对于客户端的内部缓存:Hadoop以数据包的形式传输数据(默认大小为64KB)。可以使用Hadoop hdfs-site.xml 配置中的 dfs.client-write-packet-size 选项调整此参数。为了我的目的,我使用了4MB。