HDFS缓冲写/读操作



我使用HDFS Java API和FSDataOutput和FSDataInput流向4台机器的Hadoop 2.6.0集群写入/读取文件。

FS流实现有一个bufferSize构造函数参数,我假设它用于流的内部缓存。但是,不管它的值是多少,它似乎对写/读速度完全没有影响(我尝试了8KB到几兆字节之间的值)。

我想知道是否有某种方法来实现缓冲写/读到HDFS集群,不同于包装FSDataOutput/Input到BufferedOutput/Input流?

我找到了答案。

filessystem .create()的bufferSize参数实际上是io.file.buffer。尺寸我们可以从文档中读取到:

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

从"Hadoop:权威指南"一书中我们可以读到一个好的起点是将其设置为128KB。

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

最新更新