min.num.spills.for.combine(默認3)組合器是否有條件運行
它表示什麼?
a)最小號碼。地圖溢出讓組合器運行?所以,即使我們已經指定了一個組合器,它不能保證運行?
b)最小號碼。在合併器運行在通過io.sort.factor創建的合併/排序的單個文件之前有溢出。所以每次通過合併創建一個新文件時,組合器都會運行到該文件上,前提是沒有。的溢出是最小3
我覺得正確的答案是a),但任何人都可以證實。
min.num.spills.for.combine(默認3)組合器是否有條件運行
它表示什麼?
a)最小號碼。地圖溢出讓組合器運行?所以,即使我們已經指定了一個組合器,它不能保證運行?
b)最小號碼。在合併器運行在通過io.sort.factor創建的合併/排序的單個文件之前有溢出。所以每次通過合併創建一個新文件時,組合器都會運行到該文件上,前提是沒有。的溢出是最小3
我覺得正確的答案是a),但任何人都可以證實。
當map函數生成中間結果並首先將它們發送到緩衝區時,分區和排序將開始,如果指定了組合器,則此時將調用它。該過程與地圖功能並行。當map函數完成時,磁盤上的所有溢出將被合併,組合器也將在此時被調用。
緩衝區閾值受限於io.sort.spill.percent
,在此期間會產生溢出。如果溢出的數量超過min.num.spills.for.combine
,則組合器會在寫入磁盤之前創建的溢出調用。
所以要回答你的問題:你是對的,它是選擇a)。
Ref:This mail thread。
我有同樣的感覺:)
min.num.spills.for.combine(默認值3)表示,如果你在你的工作組合和泄漏的數量是三個或更多(至少3 ),然後它會在映射輸出寫入本地磁盤之前調用。
請參閱從權威指南這個段:
如果指定了組合功能,和泄漏的數量是 至少三個(在min.num.spills.for.combine的值屬性), 然後在寫入輸出文件之前運行組合器。回想一下 組合器可能會在輸入上重複運行而不會影響最終結果 。重點在於運行組合器可以獲得更多的壓縮映射輸出,因此寫入本地磁盤的數據較少,要傳輸到還原器的數據較少。
「回想一下,組合器可能會在輸入上重複運行,而不會影響最終結果。」 這條線讓我想起答案b) –
恕我直言,合併將發生在合併器之後。 – Tariq