2016-02-04 45 views
1

我很困惑,因爲我找到了兩個答案。哪個先運行,MapReduce作業中的合併器或分區器

1)根據Hadoop權威指南 - 第3版,第6章 - 地圖方面說:「在寫入磁盤之前,線程首先將數據分成對應於最終要發送到的減速器的分區。在每個分區內,後臺線程按鍵進行內存中排序,如果有組合器功能,則在分類輸出中運行。

2)Yahoo開發者教程(Yahoo tutorial)說Combiner在分區器之前運行。

任何人都可以請澄清一下哪個運行第一個

回答

4

的Map Reduce作業可以包含一個或所有這些階段的

  1. 地圖

  2. 聯合

  3. 洗牌和排序

  4. 減少

Partitioner符合第二和第三階段之間

您可以訪問此 link瞭解更多詳情。

通過相關SE會後仍有問題&文章,

What runs first: the partitioner or the combiner?

Who will get a chance to execute first , Combiner or Partitioner?

https://sreejithrpillai.wordpress.com/2014/11/24/implementing-partitioners-and-combiners-for-mapreduce/

我們可以看到,看法不一。

但是邏輯上我覺得

  1. 映射器寫入輸出到環形環形緩衝存儲器
  2. 如果減速器的數量都超過1個&分割器就位,映射器的輸出將被劃分
  3. 一旦緩衝存儲器已滿,輸出將溢出到磁盤上
  4. 按照hadoop權威指南「在每個分區中,後臺線程按鍵進行內存中排序,如果存在組合器功能,它是在排序的輸出」

它意味着分區程序應該首先運行和組合器具有在與-每個分區輸出數據運行運行。

+0

謝謝拉文德拉。分區根據reducers權限創建。所以我的問題是,在節點上應該運行reduce任務的分區是否被創建? – avinash

+0

編號分配編號發生在映射器節點。 Reducer將在洗牌和分類後得到數值。你可能有100個映射器和5個reducer。在所有50個映射器完成執行並將框架複製到Reducer節點後,5個reducer將獲得值。 –

+0

我們來舉個例子吧。 MR作業在10個Datanodes的集羣上運行。圖像這個工作需要10個映射器和2個reducer。 1)假設2個地圖任務在「5 DataNode」上同時運行,所以我們總共可以同時執行10個mapper。 2)每個映射任務的輸出(如果使用Combiner,則使用組合器結果)存儲在每個Datanode的本地文件系統上。 3)這些中間數據需要在所有節點之間進行交換(混洗階段),並進行排序並給予「2減少任務」。 所以我們有5個Datanodes運行地圖任務。哪個節點會發生分區,以及將創建多少個分區? – avinash

相關問題