2016-07-05 60 views
0

我正在閱讀最初的MapReduce論文。我的理解是,處理數百GB的數據時,傳輸太多數據的網絡帶寬可能成爲MapReduce作業的瓶頸。對於地圖任務,我們可以通過在已經包含任何給定拆分數據的工作人員上安排地圖任務來減少網絡帶寬,因爲從本地磁盤讀取數據不需要網絡帶寬。MapReduce洗牌階段瓶頸

然而,洗牌階段似乎是一個巨大的瓶頸。 reduce任務可能會接收來自所有map任務的中間鍵/值對,並且幾乎所有這些中間鍵/值對都將通過網絡進行流式傳輸。

當使用數百GB或更多GB數據時,是否需要使用組合器來獲得高效的MapReduce作業?

回答

1

如果合併器可以適應這種情況,它就像本地縮減器一樣起作用,所以它不會發送所有數據,只會發送很少的值或本地聚合值,但組合器不能應用於所有情況。

如果reduce函數既可交換也可關聯,那麼它可以用作組合器。

就像在中位數的情況下,它不會工作。

合併器不能用於所有情況。

有可調諧的像其他參數:

當地圖發射輸出它直接不走磁盤它進入100 MB循環緩衝器,當填充80%它溢出記錄到磁盤。

因此,您可以增加緩衝區大小並增加thresh hold值,在這種情況下溢出量會更少。

如果有太多的溢出,那麼溢出會合併成一個文件,我們可以使用溢出因子。

有這樣的線程將數據從本地磁盤複製到reducer jvm's,以便它們的數量可以增加。

壓縮可以在中間級別和最終級別使用。

所以Combiner不是唯一的解決方案,不會在所有情況下使用。

+0

關於循環緩衝區:我的理解是worker節點向內存緩衝區發出中間鍵值對,並且週期性地將緩衝的鍵值對寫入本地磁盤。但是RAM和磁盤對工作人員來說都是本地的 - 當我們流向潛在的每個reducer節點時,這是如何在混洗階段減少網絡帶寬的? – Ben

+0

我正在談論整體性能,但無論如何間接它也會幫助減速器級別,減少溢出意味着更少的時間來合併溢出文件,所以輸出將提前準備好,然後減速器線程可以開始複製數據。 – user3484461

1

可以說映射器正在發射(單詞,計數)。如果你不使用組合器,那麼如果一個映射器有單詞abc 100次,那麼reducer必須拉(abc,1)100次。可以說(單詞,計數)的大小是7個字節。如果沒有組合器,減速器必須提取7 * 100個字節的數據,與組合器一樣,減速器只需要提取7個字節的數據。這個例子只是說明組合器如何減少網絡流量。 注意:這是一個模糊的例子,只是爲了使理解更簡單。

+0

根據user3484461的回答,組合器僅適用於關聯和交換減少函數。 User3484461指出壓縮是降低網絡帶寬的另一種方式。是否還有其他技術被使用? – Ben

+0

是的reduce函數必須是可交換的和關聯的......假設你必須計算{1,2,3,4,5,6}的平均值,並且{1,2,3}將進入一個mapper和{4,5,6}將會轉到另一個。 (1,1),(2,1)和(3,1),它可以發送一個元組(1 + 2 + 3,3),即(6,3),而不是發送(4,1 ),(5,1)和(6,1)它可以發送(15,3)。在減速機上,它會做(6 + 15)/(3 + 3)。這還可以通過巧妙地設計(鍵,值)對來節省網絡流量。 – gunner87

+0

在還原函數不*交換和關聯的情況下是否還有其他技術可用? (我提到了壓縮,但我問是否還有其他東西)。 – Ben