2013-09-25 44 views
1

我有一種情況,在一個機器和默認複製因子文件謊言的整個塊是1Hadoop映射器是否僅在本地執行?

在這種情況下,如果我在我的羣集中啓動的Hadoop,我覺得我所有的映射任務將只運行因爲塊只存在於該機器上。這樣對嗎?本地映射器任務執行是一個約束還是一個優先級?
如果是,是否可以通過將映射器任務也複製到其本地磁盤的方式在其他機器上運行來進行配置。

第二個問題是,即使映射任務只在一臺機器上運行,它是正確的,減速將在所有其他計算機通過複製映射器的中間數據開始?

+0

假設我們有足夠的地圖並減少插槽 – GoT

回答

2

數據本地執行只是優先級而非約束。如果其他節點上有空閒插槽,Hadoop將產生非本地映射器。你甚至可以在的同一時間爲同一塊啓動更多的映射器 - 這被稱爲推測性執行 - 並且任務完成第一次勝利,其他人被殺死。

至於減速 - 他們複製階段稱爲洗牌地圖通過網絡輸出數據。

+0

謝謝。我認爲複製只能在縮小階段完成(洗牌)。那麼,如果地圖插槽存在,是否也意味着同一塊數據也會被複制到非本地機器上執行地圖任務? – GoT

+0

是的,在這種情況下,地圖任務的輸入數據將被複制,並且效率遠低於本地執行的效率。 –

1

框架會盡可能保持處理地方越好。但是,這可能會有一些情況沒有遵循。一個顯然是槽不可用。另一種情況可能是您的InputSplit跨越多個塊並且每個塊位於不同的機器上。在這種情況下,InputSplit的另一部分將移動到啓動此InputSplit的Mapper的節點,以便整個塊得到1個Mapper的處理。

是本地映射器執行任務的約束或只是一個優先?

這不是一個制約因素。這只是讓事情變得更有效率。否則,將BigData從這裏移到那裏以處理它是多麼的低效。這是Hadoop的基本原理之一。

如果是的話,是否有可能以這樣的方式映射任務也存在於其它機器通過複製塊到他們的本地磁盤上運行配置?

你爲什麼要這麼做?如果您真的想在同一個塊的多個副本上運行Mappers,則可以將推測執行切換爲true,而不是將塊從一個地方複製到另一個地方。這將在多臺機器上的同一塊上運行多個映射器,您將通過最快的映射器獲得輸出結果。

第二個問題是,即使映射程序任務只在一臺機器上運行,通過複製映射程序的中間數據,在所有其他機器上啓動reducer也是正確的。

減速器可以在具有空閒插槽的任何節點上啓動。不是所有的機器都必須。