hdfs缓冲写/读操作

bttbmeg0  于 2021-06-02  发布在  Hadoop
关注(0)|答案(1)|浏览(466)

我正在使用hdfsjavaapi和fsdataoutput和fsdatainput流将文件写入/读取到由4台机器组成的hadoop2.6.0集群。
fs流实现有一个buffersize构造函数参数,我假设它是流的内部缓存的参数。但它似乎对写/读速度完全没有影响,不管它的值是多少(我尝试了8kb到几MB之间的值)。
我想知道是否有什么方法可以实现对hdfs集群的缓冲写/读,不同于将fsdataoutput/input Package 到bufferedoutput/input流中?

mbzjlibv

mbzjlibv1#

我找到了答案。
filesystem.create()的buffersize参数实际上是io.file.buffer.size,从文档中可以看到:
“用于序列文件的缓冲区大小。此缓冲区的大小可能是硬件页大小的倍数(英特尔x86上为4096),它决定了在读写操作期间缓冲了多少数据。”
从《hadoop:权威指南》一书中我们可以看到,一个好的起点是将其设置为128kb。
至于客户端的内部缓存:hadoop以包的形式传输数据(默认大小为64kb)。可以使用hadoop hdfs-site.xml配置中的dfs.client-write-packet-size选项调整此参数。为了我的目的,我用了4mb。

相关问题