需求
1、輸入資料:
keya 1
keyb 3
keyb 77
keyb 54
keya 2
keyc 22
keyc 221
keyc 20
2、目標輸出
keya 1,2
keyb 3,54,77
keyc 20,22,221
解決思路
step 1. 改裝map結構,組合成乙個新的key值
mr框架不管是 預設排序 或者是 自定義排序 都只是對key值進行排序,但我們可以將原始資料的key值和其對應的value值組合成乙個新的key值。即原始資料的map改裝如下:
keya,1 1
keyb,3 3
keyb,77 77
..
step 2. 自定義分割槽 setpartitionerclass,將key第乙個字段相同 放到乙個reduce中
對新的key 進行排序,需要自定義 分割槽處理器(如果 新key的第乙個字段相同,放到同乙個reduce中進行分組合併)
map shuffer 分割槽操作後,輸出的資料流如下:
# partition1:
keya,1 1
keya,2 2
# partition2:
keyb,3 3
keyb,77 77
keyb,54 54
# partition3
keyc,22 22
keyc,221 221
keyc,20 20
step 3. key比較函式類 setsortcomparatorclass
先對key的第乙個字段進行排序,如果第乙個字段相同,使用key的第二個字段進行排序。
# partition1:
keya,1 1
keya,2 2
# partition2:
keyb,3 3
keyb,54 54
keyb,77 77
# partition3
keyc,20 20
keyc,22 22
keyc,221 221
ps. 實現writablecomparable介面,並編寫 compareto 方法
step 4. 分組排序使用的比較器 setgroupingcomparatorclass
決定著 不同key 進入不同的reduce(對key的第乙個字段進行排序即可)
MapReduce二次排序
預設情況下,map輸出的結果會對key進行預設的排序,但個別需求要求對key排序的同時還需要對value進行排序 這時候就要用到二次排序了。本章以hadoop權威指南中計算每年最大氣溫值為例,原始資料雜亂無章 2008 33 2008 23 2008 43 2008 24 2008 25 2008 ...
Map reduce二次排序
map reduce的流程切面 splitmapperpartitioncombinergroupreducer 這裡要解釋下 partition 和 group 它們都是shuffle的重要步驟 的區別.他們的作用都是為了reducer分配記錄去處理.但區別是partition是把記錄分給不同的r...
mapreduce 二次排序
所謂二次排序,對第1個字段相同的資料,使用第2個字段進行排序。舉個例子,電商平台記錄了每一使用者的每一筆訂單的訂單金額,現在要求屬於同乙個使用者的所有訂單金額作排序,並且輸出的使用者名稱也要排序。賬戶訂單金額 hadoop apache 200hive apache 550yarn apache 5...