2013-10-31 31 views
1

我的工作是計算密集型的,所以我實際上只使用Hadoop的分佈函數,並且我希望我的所有輸出都位於1個單個文件中,因此我將reducer的數量設置爲1.我的reducer實際上什麼都不做。Hadoop - 將減速器編號設置爲0但寫入相同的文件?

通過明確設置reducer的數量爲0,我可以知道如何控制映射器中的所有輸出寫入同一個輸出文件?謝謝。

回答

1

你不能在Hadoop中做到這一點。您的映射器必須寫入獨立的文件。這使得它們高效(無爭用或網絡傳輸)。如果你想合併所有這些文件,你需要一個減速器。或者,您可以讓它們成爲單獨的文件,並在下載文件時合併文件(例如,使用HDFS的命令行catgetmerge選項)。

編輯:從你的評論中,我看到你想要擺脫寫減速器的麻煩。這絕對有可能。爲此,您可以使用IdentityReducer。您可以檢查它的API here,並且使用IdentityReducer可用的here可用0減速器的解釋。

最後,當我說有多個映射器生成單個輸出是不可能的,我的意思是它不可能在HDFS中的純文件。您可以使用其他類型的輸出來完成此操作,例如將所有映射器寫入單個數據庫。如果你的映射器沒有產生太多的輸出,這是可以的。有關如何工作的細節可用here

+0

這是我的理解......只是想知道是否有任何隱藏的指標/參數來執行該操作。所以最好的方法是將減速器保持在那裏。 :/ – Kevin

+0

@kevin。不,也不可能,因爲它會殺死你的表現。 – cabad

+0

當我說隱藏參數就像我不需要創建reducer類,但hadoop足夠聰明,可以將所有輸出「減少」到文件。顯然我在想太多。大聲笑 – Kevin

0

cabad正確的大部分。但是,如果您想用單個Mapper將文件處理爲單個輸出文件,則可以使用FileInputFormat將文件標記爲不可拆分。執行此操作以及將Reducers的數量設置爲0.這會降低使用多個數據節點的性能,但會跳過Shuffle和Sort。

+0

是的,一個映射器也可以工作。我沒有建議,因爲他說他的任務是CPU密集型的,所以我猜測一個映射器會殺死他的表現。但是,爲了完整起見,我應該包括這個替代方案(將來參考)。感謝您指出。 – cabad