2013-07-31 70 views
1

min.num.spills.for.combine(默認3)組合器是否有條件運行

它表示什麼?

a)最小號碼。地圖溢出讓組合器運行?所以,即使我們已經指定了一個組合器,它不能保證運行?

b)最小號碼。在合併器運行在通過io.sort.factor創建的合併/排序的單個文件之前有溢出。所以每次通過合併創建一個新文件時,組合器都會運行到該文件上,前提是沒有。的溢出是最小3

我覺得正確的答案是a),但任何人都可以證實。

回答

1

當map函數生成中間結果並首先將它們發送到緩衝區時,分區和排序將開始,如果指定了組合器,則此時將調用它。該過程與地圖功能並行。當map函數完成時,磁盤上的所有溢出將被合併,組合器也將在此時被調用。

緩衝區閾值受限於io.sort.spill.percent,在此期間會產生溢出。如果溢出的數量超過min.num.spills.for.combine,則組合器會在寫入磁盤之前創建的溢出調用。

所以要回答你的問題:你是對的,它是選擇a)。

Ref:This mail thread。

1

我有同樣的感覺:)

min.num.spills.for.combine(默認值3)表示,如果你在你的工作組合和泄漏的數量是三個或更多(至少3 ),然後它會在映射輸出寫入本地磁盤之前調用。

請參閱從權威指南這個段:

如果指定了組合功能,和泄漏的數量是 至少三個(在min.num.spills.for.combine的值屬性), 然後在寫入輸出文件之前運行組合器。回想一下 組合器可能會在輸入上重複運行而不會影響最終結果 。重點在於運行組合器可以獲得更多的壓縮映射輸出,因此寫入本地磁盤的數據較少,要傳輸到還原器的數據較少。

+0

「回想一下,組合器可能會在輸入上重複運行,而不會影響最終結果。」 這條線讓我想起答案b) –

+0

恕我直言,合併將發生在合併器之後。 – Tariq