任何人都可以解釋我如何在hadoop中進行二級排序嗎?
爲什麼必須使用GroupingComparator
以及它在hadoop中如何工作?hadoop map減少二級排序
我正在瀏覽以下鏈接,並對groupcomapator的工作方式產生疑問。
任何人都可以解釋分組比較器是如何工作的嗎?
http://www.bigdataspeak.com/2013/02/hadoop-how-to-do-secondary-sort-on_25.html
任何人都可以解釋我如何在hadoop中進行二級排序嗎?
爲什麼必須使用GroupingComparator
以及它在hadoop中如何工作?hadoop map減少二級排序
我正在瀏覽以下鏈接,並對groupcomapator的工作方式產生疑問。
任何人都可以解釋分組比較器是如何工作的嗎?
http://www.bigdataspeak.com/2013/02/hadoop-how-to-do-secondary-sort-on_25.html
分組比較
一旦數據到達減速機,所有的數據由關鍵分組。由於我們有一個組合鍵,我們需要確保記錄完全按照自然鍵組合。這是通過編寫自定義GroupPartitioner來完成的。我們有一個Comparator對象,只考慮TemperaturePair類的yearMonth字段,用於將記錄分組在一起。
public class YearMonthGroupingComparator extends WritableComparator {
public YearMonthGroupingComparator() {
super(TemperaturePair.class, true);
}
@Override
public int compare(WritableComparable tp1, WritableComparable tp2) {
TemperaturePair temperaturePair = (TemperaturePair) tp1;
TemperaturePair temperaturePair2 = (TemperaturePair) tp2;
return temperaturePair.getYearMonth().compareTo(temperaturePair2.getYearMonth());
}
}
以下是運行我們的輔助排序作業的結果:
new-host-2:sbin bbejeck$ hdfs dfs -cat secondary-sort/part-r-00000
190101 -206
190102 -333
190103 -272
190104 -61
190105 -33
190110 -33
190111 -217
190112 -300
按價值排序數據可能不是一個普遍的需求,它是一個很好的工具,需要在你的後面的口袋裏。此外,我們可以通過使用自定義分區程序和組分區來深入瞭解Hadoop的內部工作。 請參考這個鏈接.. What is the use of grouping comparator in hadoop map reduce
這裏是一個分組的例子。考慮一個複合鍵(a, b)
及其值v
。讓我們假設排序後,你最終,除其他外,與下面的一組(鍵,值)對:
(a1, b11) -> v1
(a1, b12) -> v2
(a1, b13) -> v3
使用默認的組比較的框架將調用reduce
功能3次相應的(關鍵,值)對,因爲所有密鑰都不同。但是,如果您提供自己的自定義組比較器,並將其定義爲僅取決於a
,而忽略b
,則框架得出結論認爲此組中的所有鍵均相同,並使用以下鍵僅調用一次reduce函數一次值的列表:
(a1, b11) -> <v1, v2, v3>
注意,只有第一個複合鍵使用,而B12和B13被「丟失」,即,不傳遞到減速。
在衆所周知的例子中,「Hadoop」一書按年計算最高溫度,a
是年份,而b
是按降序排列的溫度,因此b11是期望的最高溫度,您不需要關心其他b
的。 reduce函數只是將收到的(a1,b11)寫爲當年的解決方案。
在你的「bigdataspeak.com」的例子中,所有的b
都需要在reducer中,但它們可以作爲各個值(對象)v
的一部分提供。
通過這種方式,通過將您的值或其中的部分包含在鍵中,您可以使用Hadoop不僅對鍵排序,而且還對您的值進行排序。
希望這會有所幫助。
我發現很容易理解某些概念和圖表的幫助,這當然是其中之一。
讓我們假設我們的二級排序是在由姓氏和名字組成的組合鍵上。
隨着複合鍵的方式進行,現在讓我們看一下在次級分類機構
分區器和該組比較器僅使用自然鍵,所述分割使用它將具有相同自然鍵的所有記錄引導至單個縮減器。 此分區發生在Map階段,來自各個Map任務的數據由Reduce接收,它們是,分組爲,然後發送給reduce方法。這個分組就是組比較器進入畫面的地方,如果我們想要而不是已經指定了一個自定義的組比較器,那麼Hadoop會使用默認的實現來考慮整個組合鍵,這會導致錯誤的結果。
MR步驟概述
上面提到的例子有很好的解釋,讓我簡化it.we需要執行三個主要步驟。
分區程序只是確保一個reducer接收屬於某個鍵的所有記錄,但不會更改reducer按分區中的鍵進行分組這一事實。
在二次排序的情況下,我們形成組合鍵,如果我們讓默認行爲繼續,分組邏輯將認爲鍵是不同的。
所以我們需要控制分組。因此,我們必須根據關鍵的自然部分而不是複合關鍵字來指示框架。因此,分組比較器必須用於相同的。
有關進一步的參考.. http://codingjunkie.net/secondary-sort/ –
內部二次排序的工作原理是什麼?從mapper到reducer的實際流程是什麼? – user1585111
要了解...請參閱http://answers.oreilly.com/topic/457-introduction-to-mapreduce-workflows/ –