Hadoop Partitioner:了解介紹、語法、實現
已發表: 2020-05-14本 Hadoop Partitioner 教程的基本目標是為您提供 Hadoop 中使用的每個部分的逐點定義。 在這篇文章中,我們將介紹 Hadoop Partitioner 的含義、Hadoop 中對 Partitioner 的需求以及 Hadoop 分區的不良案例。
讓我們了解一下 Hadoop Partitioner 是什麼。
目錄
Hadoop中的分區器是什麼?
Partitioner 允許傳播輸出如何從 map 階段到 reducer。
Partitioner 控制中間映射輸出的關鍵段。 密鑰或密鑰的子集用於通過散列函數推斷分區。
事實上,Hadoop 結構是一個基於散列的分區器。 Hadoop 中的這個散列函數有助於派生分區。
分區根據鍵值作用於映射器輸出。 相同的鍵值進入每個映射器中的相同分區。 在這個過程之後,最終的分區被發送到一個reducer。

分區的類決定鍵和值對的去向。 分區階段位於 map 和 reduce 階段的中間。
讓我們看看為什麼需要 Hadoop Partitioner。
Hadoop 分區器的需求是什麼?
獲取輸入數據集,並在 MapReduce 架構作業階段生成鍵值對列表。 這些鍵值對是在映射階段形成的。 這發生在輸入數據被拆分時,然後由每個任務和映射處理,產生一個鍵值對列表。
但是,map out 分區發生在 reduce 階段之前,基於鍵和值。 這樣,所有具有相同值的鍵都被組合在一起,並且它們會進入同一個 reducer。 因此,即使映射輸出在 reducer 上的分佈也得到了保證。
Hadoop MapReduce 分區通過確保正確的 key 到正確的 reducer,允許在 reducer 上均勻分佈 mapper 輸出。
閱讀:印度的 Hadoop 開發人員薪水
Hadoop中哈希分區器的語法
這是 Hadoop 中哈希分區器的默認語法。
public int getPartition(K key, V value
int numReduceTasks)
{
return(key.hashCode() & Integer.MAX_VALUE) % numRedudeTasks;
}
Hadoop分區器的實現
要查看在實際應用中使用 Hadoop Partitioner 的示例,讓我們查看下表,其中包含建築物中某個街區的居民數據。
平號 | 姓名 | 性別 | 家庭成員 | 電費單 | |
1101 | 馬尼沙 | 女性 | 3 | 1500 | |
1102 | 迪帕克 | 男性 | 4 | 2000 | |
1103 | 桑傑 | 男性 | 3 | 1100 | |
1104 | 尼迪 | 女性 | 2 | 900 | |
1105 | 普拉泰克 | 男性 | 1 | 650 | |
1106 | 戈帕爾 | 男性 | 4 | 1800 | |
1107 | 薩米克沙 | 女性 | 2 | 1300 |
現在讓我們編寫一個程序,在不同的家庭成員組中按性別查找最高的電費 - 2 到 3 和 4 以下。

給定的數據將作為 input.txt 保存在“/home/Hadoop/HadoopPartitioner”目錄中。
鍵遵循一種模式——特殊鍵+文件名+行號。 例如,
鍵 = 輸入@1
為此,價值將是
價值 = 1101 \t Manisha \t 女性 \t 3 \t 1500
操作如下:
- 讀取值
- 使用 split 函數分隔性別並將它們存儲在字符串變量中
String[] str = value.toString().split(“\t”, -2);
字符串性別 = str[2];
- 現在將性別信息和記錄數據值作為 ley 和 value 對發送到分區任務
context.write(新文本(性別),新文本(值));
- 對所有記錄重複
作為輸出,您將獲得排序後的性別數據和數據值作為鍵值對。
這是分區程序任務的執行方式。
首先,分區器會將發送給它的鍵值對作為輸入。 現在,它將數據分成不同的段。
輸入
鍵 = 性別字段值
value = 該性別的記錄值
以下是該過程將如何進行。
- 從鍵值對中讀取家庭成員值
String[] str = value.toString().split(“\t”);
int age = Integer.parseInt(str[3]);
- 通過以下條件檢查家庭成員的價值
- 家庭成員 2 至 3
- 家庭成員少於 4 人
如果(家庭成員<4)
{
返回0;
}
否則如果(家庭成員>=2 && 家庭成員<=3)
{
返回 1 % numReduceTasks;
}
別的
{
返回 2 % numReduceTasks;
}
輸出
鍵值對的數據將被分割成三個給定的集合。
另請學習:您應該了解的最佳 Hadoop 工具
糟糕的分區和克服它
讓我們假設您可以預測輸入數據中的一個鍵將比任何其他鍵顯示得更多。 因此,您可能需要將所有密鑰(一個巨大的數字)發送到一個分區,然後通過它們的 hashCode() 將剩餘的密鑰分配給所有其他分區。
因此,現在您有兩種向分區發送信息的機制:
- 首先,顯示更多的密鑰將被發送到一個分區
- 其次,所有剩餘的鍵將根據它們的 hashCode() 發送到分區。
現在,假設您的 hashCode() 技術沒有正確地將其他鍵分佈在分區上。 因此,信息在分區和歸約器中的傳播並不相同。 這是因為每個分區都與一個 reducer 成正比。

因此,某些 reducer 會比其他 reducer 擁有更多的數據。 因此,由於手頭的負載,剩餘的 reducer 將不得不等待一個 reducer(一個帶有用戶定義鍵的)。
在這種情況下,您應該遵循一種可以在不同的 reducer 之間共享數據的方法。 通過我們的 Hadoop 終極教程了解有關 Hadoop 的更多信息。
結論
我們希望這份關於 Hadoop 分區器的指南對您有所幫助。 有關此主題的更多信息,請與 upGrad 的專家聯繫,我們將幫助您渡過難關。
如果您有興趣了解有關大數據的更多信息,請查看我們的 PG 大數據軟件開發專業文憑課程,該課程專為在職專業人士設計,提供 7 多個案例研究和項目,涵蓋 14 種編程語言和工具,實用的動手操作研討會,超過 400 小時的嚴格學習和頂級公司的就業幫助。
從世界頂級大學在線學習軟件開發課程。 獲得行政 PG 課程、高級證書課程或碩士課程,以加快您的職業生涯。
