マッパまたはレデューサクラスのメソッドrun()
はHadoopフレームワークからどのように呼び出されますか?フレームワークはrun()
メソッドを呼び出していますが、コンテキストオブジェクトは1つ必要です。そのため、Hadoopはそのオブジェクトをどのように渡していますか?その情報にはどのような情報が含まれていますか?Hadoop Mapperコンテキストオブジェクト
答えて
run()メソッドは、Javaランタイムポリモーフィズム(メソッドオーバーライド)を使用して呼び出されます。下のリンクの#569行目を見ると、拡張されたマッパー/レデューサーはJava Reflection APIを使用してインスタンス化されます。 MapTaskクラスは、クライアントプログラムは以下の通りHadoop Source MapTask.java
mapperContext = contextConstructor.newInstance(mapper, job, getTaskID(),
input, output, committer,
reporter, split);
input.initialize(split, mapperContext);
mapper.run(mapperContext);
input.close();`
から取られたコードである
job.setMapperClass()
を使用して、拡張マッパ/減速クラスを設定されていたジョブの設定オブジェクトから拡張マッパー/減速の名前を取得します
行番号621は、実行時の多型の例です。この行で、MapTaskは 'Mapper Context'をパラメータとして構成されたマッパーのrun()メソッドを呼び出します。 run()が拡張されていない場合、org.apache.hadoop.mapreduce.Mapper
のrun()メソッドが呼び出され、構成されたマッパーのmap()メソッドが再び呼び出されます。上記リンクの回線#616で
、MapTaskは@harpunにより述べたように等のジョブ設定のすべての詳細をコンテキスト・オブジェクトを作成し、回線#621
上でrun()メソッドに渡し上記の説明は、適切なReduceTaskクラスをメインエントリクラスとして、タスクを削減する場合にも有効です。
はい、マッピングタスクの実行時にマッパーのrun()
メソッドがMRフレームワークによって呼び出されます。コンテキストに関する限り、Mapper.Contextのドキュメントを見てください。特に、実装されたインタフェースとそのjavadocは、コンテキストに含まれる情報の完全な概要を示します。文脈を通して、あなたのようなデータにアクセスすることができます。現在実行タスクの試み
- ジョブ情報(ジョブ構成、マッパー/減速クラス名、ジョブ名、作業ディレクトリ)
- 状態を、値、入力分割(マップタスク固有情報)
もちろん、Reducerのコンテキストオブジェクトは同じです:Reducer.Context。
- 1. Hadoop MapReduceのMapper/Reducerのセットアップとクリーンアップメソッド
- 2. Hadoop Mapperクラスの入力パスを取得
- 3. Hadoop - Mapperから直接HBaseに書き込む
- 4. Hadoop Mapperが自分のクラスを実行していない
- 5. タイプMapperは一般的ではありません、hadoop eclipseプラグイン
- 6. コンテキストオブジェクトの同期
- 7. 子コンテキストオブジェクトの作成について親コンテキストオブジェクトに通知する
- 8. 複数のスレッドで共有されるHadoopのMapperオブジェクトですか?
- 9. Hadoop DistributedCache
- 10. Spring Jackson Mapper
- 11. Data Mapperモデル
- 12. ORM Mapper .NET linux server
- 13. Jackson MapperとJavaマッピング
- 14. Javascriptの実行コンテキストと実行コンテキストオブジェクト
- 15. MapperまたはReducerで例外を処理するためのHadoopのベストプラクティスは何ですか?
- 16. AutoMapperからEmit Mapperへ
- 17. Lift MapperのLowerCase Like文
- 18. mongo-hadoopを使ってPythonにHadoopストリーミング
- 19. Hadoopストリーミングの問題
- 20. Hadoop API VS. Hadoop Streaming
- 21. Mapperジョブの値のみを書き込む
- 22. Hadoopの - 特定のノード
- 23. Hadoop DistributedCacheは、hadoopジョブでステータス
- 24. Hadoop/Hbase:java.lang.NoClassDefFoundError:org/apache/hadoop/hbase/HBaseConfiguration
- 25. Hadoopのレデューサーレベルで複製しますか?
- 26. Aws sdk for java、dynamo db mapper async
- 27. Scala/Lift Mapper - 符号なしMappedInt
- 28. Emit Mapperをカスタムコンバータでフラット化する
- 29. 標準以外のJSONのカスタムカスタムオブジェクトMapper
- 30. Mapperクラスへの変数の送信
ありがとうございましたniranjanは、すべての単純なジョブを実行している間にすべてのhadoopフレームワーククラスが実行されることを説明できますか? –
これは簡単な答えではありません。実際には、拡張されたクラスが呼び出される前に実行されるソフトウェアレイヤ全体であるhadoopフレームワーククラスがたくさんあります。私は、あなたのIDEにhadoopソースをダウンロードして接続し、コールスタックで使用されている高水準クラスを理解するためのジョブをデバッグすることを提案します。 –
@NiranjanSarvi、MapTaskクラスがコンテキストクラスである他のクラスのオブジェクトを作成する方法を教えてください。 Contextクラスは抽象クラスであり、Maptaskクラスでも実装されていないため、MapTaskクラスとContextクラスの間に関係はありますか?それは他の方法から来ていますか? – Kate