MapTaskのMapReduceの実装の仕組み

マッププロセスの段階は:によって入力ファイル分割は、論理的に複数に分割され、分割することによってファイルのレコードに行の内容を読み出すマッピング処理(ユーザ自身の実装)、データはマップ処理の終了までOutputCollectorのコレクタ、そのその結果、キーパーティション(デフォルトのハッシュパーティション)、その後、書き込みバッファを、各マップタスクがメモリバッファを持って、メモリマップのほぼ完全なバッファへの出力のデータが一時バッファにする必要がありますディスクにファイルを保存するための方法、全体マップタスク内のディスクの終了後、マップタスク最終的な公式の出力ファイルを生成するために合併を行うために作成されたすべての一時ファイル、および待つタスクを削減するデータを取得します。

詳細な手順:

  1. まず、データ・コンポーネントの読みのInputFormat (デフォルトTextInputFormat 渡しします)getSplitsは、ディレクトリ方式で入力ファイルである論理チップ・プランニング取得するための分割を、多数の分割は、開始の数に対応するであろうMapTask 分割ブロックのデフォルトの1との対応を。
  2. 入力ファイルは、に分割分割RecordReaderのオブジェクト(デフォルトLineRecordReader する読み取り)\ N 区切りとして、リターン<キー、値>、データの行を読み出しますキーは、各ラインのオフセット値の最初の文字を表した値は、テキストの行を表します。
  3. 読むスプリットに戻る<キー、値>を、ユーザー自身の継承された入力マッパークラスを、実行するマップ機能を書き換えるようにユーザーにRecordReaderは、かつてここに呼ばれるラインをお読みください。
  4. マップ論理完成した後に、マップの各結果のcontext.write のための収集データ収集。収集、最初は次のようになりますゾーニングプロセスデフォルトの使用HashPartitionerを
    1. MapReduceは提供パーティション分割の役割をに基づいて、インターフェイスのキーまたは及び低減決定するの最終的な数によって完了されるべき現在の出力データのどのタスク低減処理を。その後、剰余をタスクを軽減するための鍵ハッシュのデフォルト数デフォルトのモジュロの方法は、ちょうど平均に減らし、ユーザー自身がする場合は、処理能力をパーティにカスタマイズしてに設定することができ、需要がある仕事に。
  5. 次に、データがメモリに書き込まれ、この領域内のメモリが呼び出され、リングバッファ、バルク収集のバッファゾーンマップディスク低減するため、結果IOの効果。当社のキー/値ペアとパーティションの結果がバッファに書き込まれます。コースを書き込む前に、キーの値は、バイト配列にシリアライズされています。
    1. 実際には、リングバッファが配列され、アレイのストレージ・キーシーケンス・データとキーを含むメタデータ情報、パーティションキー開始位置、値の開始位置および値の長さ。環構造を抽象化したものです。
    2. バッファのサイズが制限され、デフォルトは100メガバイトです場合マップタスクが特定の条件下で必要であるので、多くの出力は、それは、メモリを爆発することができる、一時的なデータ・バッファが、ディスクに書き込まれ、このバッファを再利用します。このことから呼ばれるディスクメモリプロセスにデータを書き込むための流出(オーバーフロー書き込み)別のスレッドで完了し、する書き込みバッファには影響を与えませんマップスレッドの結果を。これは、オーバーフローのスレッドが開始書く防ぐべきではありません地図出力を、その全体のバッファが存在する割合のspill.percentを書かオーバーフローが。デフォルト率は0.8であるバッファデータが閾値(到達した場合、すなわち、バッファサイズ= 100MBの*パーセント流出* 0.8 = 80メガバイト)、オーバーフロースレッドが開始されると、このロックライト80メガバイトのメモリをオーバーフロー書き込み処理を実行します。マップタスクはまた、以前の残りの部分を出力20メガバイトの互いに独立して、メモリの書き込みを。
  6. オーバーフロー書き込みスレッドが開始すると、これは必要と80メガバイト内部スペースキーを行うには、ソート(並び替え)をソートはあるのMapReduce ここでは、ソートのデフォルトの動作は、ソートを行うための一連のバイトであるモデル。
    1. 場合は、ジョブが設定されているコンバイナを、それが使用することですコンバイナの時間を。同じになりますキーキー/値のペアの値をディスクのオーバーフローに書き込まれるデータの量を減らし、アップに追加します。コンバイナは、最適化するMapReduceの中間結果をので、モデル全体に複数回使用されるであろう。
    2. あなたが使用することができますどのようなシーンコンバイナそれを?この分析から、コンバイナが出力される減速の入力、コンバイナはなく、最終的な結果は変化。コンバイナは唯一のものを使用する必要があります削減の入力キー/値及び出力のキー/値の一貫性のあるタイプを、シーンの最終結果には影響を与えません。このような蓄積、最大値などが挙げられます。コンバイナも、それが使用された場合に使用することは、注意するようになったジョブに影響します逆に、実行効率のヘルプを減らし、最終的な結果を。
  7. ディスク上のすべてのオーバーフローの書き込みが発生します一時ファイルを(最初があるかどうかを判断する必要がありますコンバイナ場合)、地図、多くのそのような書き込みオーバーフローが発生したある出力本当に大きな、ディスクが一時的に対応する番号を持っていますファイルが存在します。することにより、ディスク上の一時ファイルの全データの後に開始を処理するときにマージマージディスクに書き込まれ、最終的に一つだけのファイル、ので、とのためのファイルを提供インデックスファイルをするためには、各レコードを減らし、対応するデータのオフセットを。
  8. マップ全体の位相を終了します。
 



おすすめ

転載: www.cnblogs.com/TiePiHeTao/p/b538975b98d02effba4b125491f5d398.html