2012-03-01 86 views
0

我有一個分層目錄,每個目錄中有很多文件,並且每個文本文件中都有很多URL字符串。我想要在Hadoop中的所有文件中下載所有URL以獲得更好的平衡。例如,如果我有1 + 5個節點Hadoop集羣和5個URL,那麼是5個URL合一文件或1個URL每個文件(然後獲取5個文件)作爲輸入獲得更好的平衡?如何拆分輸入集以獲得更好的Hadoop餘額?

我認爲Hadoop會默認將輸入集合分割爲64M塊來運行在單個節點上,不能運行全部5個從站。

謝謝你的回答!

回答

3

如果你沒有在每個URL上做很多計算密集的東西,並且你的文件大小是64 MB,那麼在一個節點上只運行一個映射器可能會更好。在這種情況下,我會使用一種文件方式處理所有網址。

最好是有更大的文件,以便每個映射器有足夠的工作要做。如果你的文件非常小,那麼合併它們使總數接近64 MB標記。這也將允許更多的數據存儲在HDFS中,因爲每個文件在Namenode上佔用RAM來存放元數據,並且RAM是有限的,所以如果使用較少數量的文件,則可以將更多數據放入羣集中,並且Namenode將使用更少的RAM。

您也可以嘗試服用CombineFileInputFormat方法