Hadoop學(xué)習(xí)筆記 Partitioner與自定義Partitioner

一锥惋、初識Partitioner

? ? ? ? 在認(rèn)識Partitioner之前我們先來回顧一下MapReduce流程中,Map階段的五個步驟眶痰。如下圖所示:


map流程圖

? ? ? ? 我們可以通過上圖看到step1.3就是一個Partition操作。其主要作用是計算應(yīng)該將哪些Key放到同一個Reduce中去。其次從圖上我們可以得知Partition的操作是基于map的輸出結(jié)果的描馅,而且分區(qū)操作的對象是key。

? ? ? ? 接下來讓我們一起看看官方文檔對這個Partition的解讀吧而线。


Apache官方文檔

? ? ? ? 該文檔主要描述了:Partition的主類名為Class Partitioner<KEY,VALUE>其直屬子類有BinaryPartitioner,?HashPartitioner,?KeyFieldBasedPartitioner,?TotalOrderPartitioner這幾個類铭污。

? ? ? ? 并且說明了Partitioner直接采用了map的輸出,其中分區(qū)的典型方式是使用hash函數(shù)進(jìn)行分區(qū)將key相同的數(shù)據(jù)分為一組膀篮。上述的其子類?HashPartitioner就實現(xiàn)了這個功能嘹狞。

/** Partition keys by their {@link Object#hashCode()}. */

public class HashPartitioner<K, V> extends Partitioner<K, V> {

/** Use {@link Object#hashCode()} to partition. */

public int getPartition(K key, V value, int numReduceTasks){

return (key.hashCode() & Integer.MAX_VALUE) % numReduceTasks;

}

}//其中key和value為map輸出,numReduceTasks是reduce的數(shù)量誓竿。

? ? ? ? 我們可以看到上面的代碼中最關(guān)鍵的一行為:key.hashCode() & Integer.MAX_VALUE) % numReduceTasks磅网。那么為什么要用hashcode與上最大整形呢?這是因為如果Key為Text的話筷屡,Text的hashcode方法跟String的基本一致涧偷,都是采用的Horner公式計算,得到一個int整數(shù)毙死。但是燎潮,如果string太大的話這個int整數(shù)值可能會溢出變成負(fù)數(shù),所以和整數(shù)的上限值Integer.MAX_VALUE(即0111111111111111)進(jìn)行與運算扼倘,然后再對reduce任務(wù)個數(shù)取余确封,這樣就可以讓key均勻分布在reduce上。?

二、自定義Partitioner

現(xiàn)在我們有一下天氣數(shù)據(jù)爪喘,我們需要按要求將每年的最高氣溫找出來颜曾。

1949-10-01 14:21:02 34C

1949-10-02 14:21:12 36C

1950-02-02 11:21:12 32C

1950-05-02 11:31:12 37C

1951-12-02 11:31:12 23C

1950-12-02 11:31:12 47C

1950-12-02 11:31:12 27C

1951-06-02 11:31:12 48C

1951-07-02 11:31:12 45C

如果需要將每年的最高氣溫找出,那我們就必然需要將氣溫數(shù)據(jù)按年分組腥放。

public class wdPartitioner extends Partitioner<Text, Text>{

@Override public int getPartition(Text key, Text value, int numReduceTasks) {

?String str = key.toString().split("-")[0];

int num = Integer.parseInt(str);

if(num == 1949){ return 1%numReduceTasks; }

else if(num == 1950) { return 2%numReduceTasks; }

else if(num == 1951){ return 3%numReduceTasks; }

return 1%numReduceTasks; }

}

可以看到這里由于年份只有這三年所以就按照年份來進(jìn)行判斷了泛啸,如果年份較多需要分成很多組那么就可以寫成return (num.hashCode() & Integer.MAX_VALUE) % numReduceTasks;在處理不同的數(shù)據(jù)的時候我們可以繼承不同的子類以方便我們運算。其子類用法請參考


Hadoop Partition用法

總結(jié):分區(qū)Partitioner主要作用在于以下兩點

(1)根據(jù)業(yè)務(wù)需要秃症,產(chǎn)生多個輸出文件候址;

(2)多個reduce任務(wù)并發(fā)運行,提高整體job的運行效率种柑;

(3)好的Partition可以有效的避免數(shù)據(jù)傾斜岗仑;

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市聚请,隨后出現(xiàn)的幾起案子荠雕,更是在濱河造成了極大的恐慌,老刑警劉巖驶赏,帶你破解...
    沈念sama閱讀 211,561評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件炸卑,死亡現(xiàn)場離奇詭異,居然都是意外死亡煤傍,警方通過查閱死者的電腦和手機盖文,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,218評論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蚯姆,“玉大人五续,你說我怎么就攤上這事×淞担” “怎么了疙驾?”我有些...
    開封第一講書人閱讀 157,162評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長郭毕。 經(jīng)常有香客問我它碎,道長,這世上最難降的妖魔是什么显押? 我笑而不...
    開封第一講書人閱讀 56,470評論 1 283
  • 正文 為了忘掉前任链韭,我火速辦了婚禮,結(jié)果婚禮上煮落,老公的妹妹穿的比我還像新娘敞峭。我一直安慰自己,他們只是感情好蝉仇,可當(dāng)我...
    茶點故事閱讀 65,550評論 6 385
  • 文/花漫 我一把揭開白布旋讹。 她就那樣靜靜地躺著殖蚕,像睡著了一般。 火紅的嫁衣襯著肌膚如雪沉迹。 梳的紋絲不亂的頭發(fā)上睦疫,一...
    開封第一講書人閱讀 49,806評論 1 290
  • 那天,我揣著相機與錄音鞭呕,去河邊找鬼蛤育。 笑死,一個胖子當(dāng)著我的面吹牛葫松,可吹牛的內(nèi)容都是我干的瓦糕。 我是一名探鬼主播,決...
    沈念sama閱讀 38,951評論 3 407
  • 文/蒼蘭香墨 我猛地睜開眼腋么,長吁一口氣:“原來是場噩夢啊……” “哼咕娄!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起珊擂,我...
    開封第一講書人閱讀 37,712評論 0 266
  • 序言:老撾萬榮一對情侶失蹤圣勒,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后摧扇,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體圣贸,經(jīng)...
    沈念sama閱讀 44,166評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,510評論 2 327
  • 正文 我和宋清朗相戀三年扛稽,在試婚紗的時候發(fā)現(xiàn)自己被綠了吁峻。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,643評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡庇绽,死狀恐怖锡搜,靈堂內(nèi)的尸體忽然破棺而出橙困,到底是詐尸還是另有隱情瞧掺,我是刑警寧澤,帶...
    沈念sama閱讀 34,306評論 4 330
  • 正文 年R本政府宣布凡傅,位于F島的核電站辟狈,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏夏跷。R本人自食惡果不足惜哼转,卻給世界環(huán)境...
    茶點故事閱讀 39,930評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望槽华。 院中可真熱鬧壹蔓,春花似錦、人聲如沸猫态。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,745評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至勇凭,卻和暖如春疚膊,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背虾标。 一陣腳步聲響...
    開封第一講書人閱讀 31,983評論 1 266
  • 我被黑心中介騙來泰國打工寓盗, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人璧函。 一個月前我還...
    沈念sama閱讀 46,351評論 2 360
  • 正文 我出身青樓傀蚌,卻偏偏與公主長得像,于是被迫代替她去往敵國和親柳譬。 傳聞我的和親對象是個殘疾皇子喳张,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,509評論 2 348

推薦閱讀更多精彩內(nèi)容