我很困惑,因爲我找到了兩個答案。哪個先運行,MapReduce作業中的合併器或分區器
1)根據Hadoop權威指南 - 第3版,第6章 - 地圖方面說:「在寫入磁盤之前,線程首先將數據分成對應於最終要發送到的減速器的分區。在每個分區內,後臺線程按鍵進行內存中排序,如果有組合器功能,則在分類輸出中運行。
2)Yahoo開發者教程(Yahoo tutorial)說Combiner在分區器之前運行。
任何人都可以請澄清一下哪個運行第一個
我很困惑,因爲我找到了兩個答案。哪個先運行,MapReduce作業中的合併器或分區器
1)根據Hadoop權威指南 - 第3版,第6章 - 地圖方面說:「在寫入磁盤之前,線程首先將數據分成對應於最終要發送到的減速器的分區。在每個分區內,後臺線程按鍵進行內存中排序,如果有組合器功能,則在分類輸出中運行。
2)Yahoo開發者教程(Yahoo tutorial)說Combiner在分區器之前運行。
任何人都可以請澄清一下哪個運行第一個
的Map Reduce作業可以包含一個或所有這些階段的
地圖
聯合
洗牌和排序
減少
Partitioner
符合第二和第三階段之間
通過相關SE會後仍有問題&文章,
What runs first: the partitioner or the combiner?
Who will get a chance to execute first , Combiner or Partitioner?
我們可以看到,看法不一。
但是邏輯上我覺得
它意味着分區程序應該首先運行和組合器具有在與-每個分區輸出數據運行運行。
謝謝拉文德拉。分區根據reducers權限創建。所以我的問題是,在節點上應該運行reduce任務的分區是否被創建? – avinash
編號分配編號發生在映射器節點。 Reducer將在洗牌和分類後得到數值。你可能有100個映射器和5個reducer。在所有50個映射器完成執行並將框架複製到Reducer節點後,5個reducer將獲得值。 –
我們來舉個例子吧。 MR作業在10個Datanodes的集羣上運行。圖像這個工作需要10個映射器和2個reducer。 1)假設2個地圖任務在「5 DataNode」上同時運行,所以我們總共可以同時執行10個mapper。 2)每個映射任務的輸出(如果使用Combiner,則使用組合器結果)存儲在每個Datanode的本地文件系統上。 3)這些中間數據需要在所有節點之間進行交換(混洗階段),並進行排序並給予「2減少任務」。 所以我們有5個Datanodes運行地圖任務。哪個節點會發生分區,以及將創建多少個分區? – avinash