Hadoopパーティショナー:概要、構文、実装について学ぶ
公開: 2020-05-14このHadoopPartitionerチュートリアルの基本的な目的は、Hadoopで使用されるすべてのパーツのポイントごとの定義を提供することです。 この投稿では、Hadoopパーティショナーの意味、Hadoopでのパーティショナーの必要性、およびHadoopパーティショニングの貧弱なケースについて説明します。
HadoopPartitionerとは何かを理解しましょう。
目次
Hadoopのパーティショナーとは何ですか?
パーティショナーを使用すると、出力がマップステージからレデューサーにどのように送られるかを広めることができます。
パーティショナーは、ミドルマップ出力のキーセグメントを制御します。 キーまたはキーのサブセットは、ハッシュ関数によってパーティションを推測するために使用されます。
実際のところ、Hadoop構造はハッシュベースのパーティショナーです。 Hadoopのこのハッシュ関数は、パーティションの派生に役立ちます。
パーティションは、キー値に応じてマッパー出力で機能します。 同じキー値が各マッパー内の同じパーティションに入ります。 このプロセスの後、最終的なパーティションがレデューサーに送信されます。

パーティションのクラスは、キーと値のペアがどこに行くかを決定します。 パーティショニングフェーズはマップの中央にあり、フェーズを減らします。
Hadoopパーティショナーが必要な理由を見てみましょう。
Hadoopパーティショナーの必要性は何ですか?
入力データセットが取得され、キーと値のペアのリストがMapReduceアーキテクチャジョブフェーズで生成されます。 これらのキーと値のペアは、マップフェーズで形成されます。 これは、入力データが分割されたときに発生しました。このデータは、各タスクとマップによって処理され、キーと値のペアのリストが生成されます。
ただし、マップアウトパーティションは、キーと値に基づいて、reduceフェーズの直前に発生します。 このようにして、同じ値のすべてのキーがグループ化され、同じレデューサーに移動します。 したがって、レデューサー上のマップからの出力の分散も保証されます。
Hadoop MapReduceパーティショニングでは、適切なキーが適切なレデューサーに確実に送られるようにすることで、マッパー出力をレデューサー全体に均等に分散できます。
読む:インドのHadoop開発者給与
Hadoopでのハッシュパーティショナーの構文
Hadoopのハッシュパーティショナーのデフォルトの構文は次のとおりです。
public int getPartition(Kキー、V値
int numReduceTasks)
{{
return(key.hashCode()&Integer.MAX_VALUE)%numRedudeTasks;
}
Hadoopパーティショナーの実装
実際のアプリケーションでのHadoopPartitionerの使用例を確認するために、建物内のブロック内の居住者のデータを含む以下の表を見てみましょう。
フラットナンバー | 名前 | 性別 | 家族のメンバー | 電気料金請求書 | |
1101 | マニシャ | 女性 | 3 | 1500 | |
1102 | ディーパック | 男 | 4 | 2000 | |
1103 | サンジェイ | 男 | 3 | 1100 | |
1104 | ニディ | 女性 | 2 | 900 | |
1105 | プラテック | 男 | 1 | 650 | |
1106 | ゴパル | 男 | 4 | 1800 | |
1107 | サミクシャ | 女性 | 2 | 1300 |
それでは、2〜3歳以下のさまざまな家族グループで性別ごとに最も高い電気料金を見つけるプログラムを作成しましょう。

指定されたデータは、ディレクトリ「/ home / Hadoop/HadoopPartitioner」にinput.txtとして保存されます。
キーはパターンに従います–特殊キー+ファイル名+行番号。 例えば、
キー=input@ 1
この場合、値は次のようになります
値=1101\tマニシャ\t女性\t3 \ t 1500
操作は次のようになります。
- 読み取り値
- 分割関数を使用して性別を分離し、文字列変数に格納します
String [] str = value.toString()。split(“ \ t”、-2);
文字列の性別=str[2];
- 次に、性別情報を送信し、データ値をleyとvalueのペアとしてパーティションタスクに記録します
context.write(new Text(gender)、new Text(value));
- すべてのレコードに対して繰り返します
出力として、並べ替えられた性別データとデータ値をキーと値のペアとして取得します。
パーティショナータスクは次のようになります。
まず、パーティショナーは、送信されたキーと値のペアを入力として受け取ります。 ここで、データをさまざまなセグメントに分割します。
入力
キー=性別フィールド値
値=その性別の記録値
プロセスは次のようになります。
- キーと値のペアから家族の値を読み取ります
String [] str = value.toString()。split(“ \ t”);
int age = Integer.parseInt(str [3]);
- 以下の条件で家族の価値を確認する
- 2歳から3歳までの家族
- 4歳未満の家族
if(familymembers <4)
{{
0を返します。
}
else if(familymembers> = 2 && familymembers <= 3)
{{
1%numReduceTasksを返します。
}
そうしないと
{{
2%numReduceTasksを返します。
}
出力
キーと値のペアのデータは、指定された3つのコレクションにセグメント化されます。
また学ぶ:あなたが知っておくべき最高のHadoopツール
不十分なパーティショニングとそれを克服する
入力データのキーの1つが他のどのキーよりも多く表示されると予測できると仮定します。 したがって、すべてのキー(膨大な数)を1つのパーティションに送信し、その後、hashCode()によって残りのキーを他のすべてのパーティションに配布する必要がある場合があります。
これで、パーティションに情報を送信する2つのメカニズムができました。
- まず、より多く表示されるキーが1つのパーティションに送信されます
- 次に、残りのすべてのキーは、hashCode()に従ってパーティションに送信されます。
ここで、hashCode()手法が、他のキーをパーティションに適切に分散していないことが判明したとします。 そのため、情報はパーティションとレデューサーで均等に循環されません。 これは、各パーティションがレデューサーに比例するためです。

したがって、特定のレデューサーは、他のレデューサーよりも大量のデータを持ちます。 したがって、残りのレデューサーは、手元の負荷のために1つのレデューサー(ユーザー定義のキーを持つレデューサー)を待機する必要があります。
この場合、さまざまなレデューサー間でデータを共有する方法に従う必要があります。 Hadoopの究極のチュートリアルでHadoopの詳細をご覧ください。
結論
このHadoopパーティショナーに関するガイドがお役に立てば幸いです。 このテーマの詳細については、upGradの専門家に連絡してください。私たちはあなたが航海するのを手伝います。
ビッグデータについて詳しく知りたい場合は、ビッグデータプログラムのソフトウェア開発スペシャライゼーションのPGディプロマをチェックしてください。このプログラムは、働く専門家向けに設計されており、7つ以上のケーススタディとプロジェクトを提供し、14のプログラミング言語とツール、実践的なハンズオンをカバーしています。ワークショップ、トップ企業との400時間以上の厳格な学習と就職支援。
世界のトップ大学からオンラインでソフトウェア開発コースを学びましょう。 エグゼクティブPGプログラム、高度な証明書プログラム、または修士プログラムを取得して、キャリアを早急に進めましょう。
