2015-05-29 115 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。