Hadoopの動作仕組みの理解
-
シャッフル処理
-
マップ端シャッフル
- スピル: MapTask によって処理されたデータをディスクに書き込みます
- すべての MapTask データはパーティションに最初にマークされます
- マークされたすべてのデータはリング バッファー [メモリ: 100M] に書き込まれます。
- バッファがストレージしきい値の 80% に達すると、この部分はロックされ、オーバーフローの準備が整います。
- K2V2を80%ソート:同じパーティションのデータをまとめる
- メモリ: クイックソート
- データのこの部分を小さなファイルとしてディスクに書き込みます
- 最終的に、各 MapTask は多数の順序付けられた小さなファイルを生成します。
- マージ: 各 MapTask に対応するすべての小さなファイルを 1 つの大きなファイルにマージします。
- マージソート: マージソート: ソートされたファイルに基づいてマージソート
- 各 MapTask は全体的に順序付けられた大きなファイルを取得します
- MapTask プログラムの終了はプログラム マネージャー APPMaster に通知され、APPMaster は ReduceTask に通知します。
- スピル: MapTask によって処理されたデータをディスクに書き込みます
-
リデュースエンドシャッフル
- Merge: 各 ReduceTask から各 MapTask が独自のデータをフェッチします。
- 並べ替えの結合: 自分に属するすべてのデータを結合して並べ替えます。
- マージソート
- 並べ替えの結合: 自分に属するすべてのデータを結合して並べ替えます。
- 最後に、各 ReduceTask 内のデータが全体的に順序付けされ、グループ化されていることを認識します。
- Merge: 各 ReduceTask から各 MapTask が独自のデータをフェッチします。
-
考え方: カスタム グループ化: 注文 ID、並べ替えコンパレータ: 注文価格
Order_0000001 Pdt_01 222.8 Order_0000001 Pdt_05 25.8 Order_0000002 Pdt_03 522.8 Order_0000002 Pdt_04 122.4 Order_0000002 Pdt_05 722.4 Order_0000003 Pdt_01 222.8 Order_0000003 Pdt_01 1000.8 Order_0000003 Pdt_01 999.8
Order_0000003 Pdt_01 1000.8 Order_0000002 Pdt_05 722.4 Order_0000003 Pdt_01 222.8 Order_0000001 Pdt_01 222.8 Order_0000002 Pdt_04 122.4 Order_0000001 Pdt_05 25.8
-
グループ化ルール
-
デフォルト: K2 のソーターをグループ化コンパレーターとして呼び出します。
-
カスタマイズ: WritableComparator を継承し、compare メソッドを実装します。
job.setGroupingComparatorClass
-
-
-
シャッフルの最適化
- プログラムにシャッフルプロセスを回避させてみます
- マップ結合
- ComBiner: マップ側の集計
- MapTask の数は比較的多く、各 MapTask は比較的小さなデータを処理するため、Reduce に入力されるデータ量を減らすために、事前に各 MapTask 内で集計を実行させます。
- 集約ロジック: Reduce ロジック
- 実装: job.setCombinerClass(Reduce.class)
- 発生頻度: ソートが終了するたびに、Combiner が 1 回実行されます。
- 圧縮: 圧縮
- 圧縮を使用してデータ ディスクとネットワーク IO 帯域幅を削減し、伝送速度を向上させます
- プログラムにシャッフルプロセスを回避させてみます
-
MapReduce の補足
- 断片化ルール
- ファイル サイズ/シャード サイズ > 1.1
- 1.1 倍より大きい場合、シャード サイズはシャードです
- 残りは破片です
- それより大きくない場合、ファイル全体がフラグメントです
- 1.1 倍より大きい場合、シャード サイズはシャードです
- フラグメント サイズ: max (最小フラグメント サイズ、min (最大フラグメント サイズ、ブロック サイズ))
- |
- ファイルがブロックの 1.1 倍より大きいかどうか
- 135M > 128×1.1
- スライスとして
- 145M
- スプリット1:128M
- スプリット2:17M
- 135M > 128×1.1
- ファイル サイズ/シャード サイズ > 1.1
- MapReduce 結合
- 結合ルール
- 結合アルゴリズム
- Reduce Join: リデュース側で発生し、シャッフルを通じて、グループ化時に 2 つのデータの関連ワードが関連付けられます。
- シャッフルを通過する必要がある
- ビッグデータに最適 ビッグデータを結合する
- マップ結合: 小さなデータを分散メモリに配置し、完全な小さなデータをビッグデータのあらゆる部分と結合させます。
- シャッフルする必要はありません
- 小規模データとビッグデータの結合に適しています
- Reduce Join: リデュース側で発生し、シャッフルを通じて、グループ化時に 2 つのデータの関連ワードが関連付けられます。
- 断片化ルール
-
YARN のリソース管理とタスクのスケジューリング
- マスタースレーブアーキテクチャ
- YARN 上でプロセスを実行する MapReduce プログラム
- YARN のタスク スケジューリング メカニズム
- FIFO: 単一のキュー。複数のプログラムの同時実行性または並列性を実現できません。
- 容量: 容量スケジューリング、複数のキュー、各キューは内部的に FIFO であり、複数のキューを並列化できるため、リソースを動的にプリエンプトできます。
- 公平: 公平なスケジューリング、複数のキュー、各キューは内部でリソースを共有、複数のキューは並列化可能、各キューは内部で同時実行可能、リソースの動的なプリエンプションが可能、重み優先順位の構成が可能