MapReduce 二次排序總結

2021-10-02 20:48:00 字數 1447 閱讀 1598

需求

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...