2013-04-13 60 views
4

爲了生成相對較小的報告(某些GB),我需要使用小型羣集(〜10臺服務器)處理一些大文件(〜2 TB)。使用HDFS在RAM中緩存

我只關心最終報告,而不是中間結果,機器有大量的RAM,因此使用它可以很好地減少磁盤訪問(從而提高速度),理想情況下只有在使用磁盤時纔將數據塊存儲在易失性存儲器中。

看着配置文件和previous question看來Hadoop不提供此功能。 Spark網站talks about a memory_and_disk選項,但我寧願要求公司部署基於新語言的新軟件。

唯一的「解決方案」,我發現在這種情況下,它會表現得不好設置dfs.datanode.data.dir/dev/shm/在HDFS-default.xml中,欺騙它使用非易失性存儲器,而不是文件系統來存儲數據,但是,我認爲,當RAM變滿時,它使用交換。

在RAM上儘可能使Hadoop存儲數據塊儘可能多,並且只在需要時纔在磁盤上寫入?

回答

1

您可以玩具周圍mapred.job.reduce.input.buffer.percent(默認爲0,嘗試一些更接近1.0,例如參見本blog post)和mapred.inmem.merge.threshold值也設置爲0。請注意,找到正確的值是一種藝術,需要一些實驗。

+1

謝謝!該帖子聽起來非常有用,Hadoop優化可能會很棘手 – Jacopofar