2011-11-16 29 views
1

在hadoop中,假設節點的數量是固定的(運行期間沒有服務器崩潰),如果我使用相同的分區(例如,對映射輸出的鍵進行散列分區)來對映射器輸出進行分區,並執行作業讀兩次相同的數據集。是否確定具有相同密鑰的數據將傳遞給同一個reducer?謝謝重新運行Hadoop作業,分區映射輸出仍然會轉到同一個Reducers上?

例如,我的mapoutput由兩行組成: Key |值

A |任何東西

B |任何東西

假設,我有兩個減速器1和2. 在第一次運行時,行「A |任何東西」進入減速​​器1,並且「B |任何東西」進入減速​​器2。 如果我再次跑步,是否有可能「A |任何東西」進入減速​​器2,並且「B |任何東西」都進入減速器1?

謝謝!

+0

只是好奇 - 它有什麼關係? –

+0

因爲在我的情況下,我的新數據必須加入reduce方的舊數據。如果HDFS中的舊數據被讀回,並通過映射器,並通過相同的密鑰分區,則意味着它只在本地機器上執行,這不會很昂貴,因爲它不必讀取來自其他數據節點的網絡數據。 – afancy

回答

2

map/reduce任務與節點之間沒有親和關係。當map/reduce任務運行時,調度程序會選擇一個可用的可用的map/reduce插槽(可能/可能不是上一次運行的同一臺機器)來運行該任務。因此,重新運行作業時,同一個鍵可能會由不同的縮減器處理。這就是Hadoop框架容錯的原因。

相關問題