2015-11-02 58 views
0

組合器適用的用例和組合器不適用的用例有哪些。我知道組合器的功能,但我想了解組合器有意義的不同用例。Apache hadoop組合器

+5

看一看這個問題:http://stackoverflow.com/questions/33406566/combiner -inplementation和內部加工/ 33408776#33408776 –

回答

0

源:Hadoop的明確指導:

運行組合器功能使得更緊湊的地圖輸出,所以有較少的數據寫入到本地磁盤和轉移到減速機。

如果只有一個或兩個溢出,地圖輸出大小的潛在減少不值得調用組合器的開銷,所以它不會再爲該地圖輸出運行。

什麼是溢出:每個map任務都有一個循環的內存緩衝區,它將輸出寫入。當緩衝區的內容達到特定的閾值大小(80%)時,後臺線程將開始將內容溢出到磁盤。

如果組合器符合標準(交換和關聯),IMO總是運行組合器。 Hadoop框架將決定是否運行組合器(基於地圖輸出大小/沒有溢出),因此您不必擔心性能下降。

0

普通地圖輸出字數例如在處理文件以下是
file1的:
這是一本書
這是一個書架

地圖O/P:
這個1
是1
a 1
book 1
th是1
是1
1個
書架爲了避免這樣的在網絡中的龐大的數據傳輸1

現在,組合器被使用,這是一種正常減速碼,因此,如果我們將自定義寫入組合器的地圖O/p將是:

此1,1
是1,1-
1,1-
書1
書架1

這樣減少了網絡中數據傳輸到reducer節點。

2.關於降低性能:現在如果在文件中的總線是非常大的,而不是避免大的數據傳送組合是有用的,但如果其僅總線是2,比組合器將添加上述示例它的執行開銷。

0

合併器主要用於減少Reducers需要處理的數據量。他們被稱爲迷你減速器。

一個用例,以更好地解釋:

輸出從映射器輸入到減速在沒有合的

<What,1> <do,1> <you,1> <mean,1> <by,1> <Object,1> 
<What,1> <do,1> <you,1> <know,1> <about,1> <Java,1> 
<What,1> <is,1> <Java,1> <Virtual,1> <Machine,1> 
<How,1> <Java,1> <enabled,1> <High,1> <Performance,1> 

輸出從映射器 - >合,其輸入到減速器組合器功能

<What,1,1,1> <do,1,1> <you,1,1> <mean,1> <by,1> <Object,1> 
<know,1> <about,1> <Java,1,1,1> 
<is,1> <Virtual,1> <Machine,1> 
<How,1> <enabled,1> <High,1> <Performance,1> 

即使在這個小例子中,您可以明顯看到使用組合器的數據傳輸減少量。想象一下具有萬億字節數據的萬字的情景,您可以看到巨大的網絡帶寬節省。

何時使用組合器?

  1. 您可以使用Combiner作爲字數統計的例子。

    組合器只能在是可交換 (A·B = b.a)和關聯的功能可以使用(一個。(b.c)=(A·B).c)中

當你不應該使用Combiner?

簡單。如果上述情況無效。例如將字數計算示例替換爲從員工列表中計算平均(平均)年齡。如果你將所有的值從Mapper傳遞給Reducer,你會得到不同的年齡平均值(平均值)。如果您從單個映射器發送數據子集,則會得到不同的年齡平均值。

合和減速機之間的差異,可以檢查here

當不使用合成器可以檢查here

相關問題