2013-01-13 24 views
4

我有一個簡單的問題,我想我知道關於FileInputFormat isSplitable方法的答案。如果我重寫這個方法返回false,自然我會有一個映射器處理一個文件(我只有一個文件)。如果這個文件分佈在HDFS上,它將全部被拉到我的單個映射器中。當我使用映射器處理它並創建鍵/值對以發送給reducer時,如果我創建了大量這些鍵,它們會在我的集羣中分佈以利用數據局部性還是存在某種隱式如果我認爲這是不可能發生的事情,那麼這個後果是錯的嗎?Hadoop FileInputFormat isSplitable false

回答

4

isSplitable返回false時,只有一個映射器處理整個文件。該映射器可以發射任意數量的KV對。如果使用傳統的MR架構,每個節點上都有插槽用於映射和減少,但是如果是這樣的話,那麼在這種情況下, YARN沒有插槽的概念。

可以根據插槽的可用性或基於ResourceManager在YARN情況下返回的內容,將reducer分散到多個節點上。

+0

Praveen,謝謝你的回覆。那麼當地是什麼時候發揮作用呢?僅在地圖階段?現在,我只想重複你在說什麼,以便我確信我理解它(如果我是對的,請告訴我是/否)。當映射器發射KV對時,我認爲它們被存儲,排序,然後在羣集中分佈(因爲文件實際上不再是必需的)。然後在這些KV對組上執行減少工作。 –

+0

你是對的 - 地圖具有數據局部性,因爲它處理文件作爲輸入,而Reduce處理KV作爲輸入,它沒有數據局部性。 –

相關問題