2015-05-29 149 views
1

我正在使用HDFS Java API和FSDataOutput和FSDataInput流将文件写入/读取到4台机器的Hadoop 2.6.0群集。HDFS缓冲写入/读取操作

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

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

+0

你如何测量读写速度? – kostya

+0

通过测量写入/读取给定文件所需的时间。 速度=文件大小/时间[MB /秒] – Kris

回答

1

我找到了答案。

BUFFERSIZE参数FileSystem.create的()实际上是io.file.buffer.size正如我们可以从文档读取为:

“的按顺序使用缓冲器的大小文件,这个缓冲区的大小应该是硬件页面大小的倍数(Intel x86上的4096),它决定了在读写操作期间有多少数据被缓冲。

从“Hadoop:权威指南”一书中我们可以知道,一个好的起点是将其设置为128KB。

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