4

からジョブ構成にパラメータを設定する方法はありますか? からMapperアクセスできますReducer

以下のコードを試しました

マッパー内: map(..) :context.getConfiguration().set("Sum","100"); レデューサー内: reduce(..):context.getConfiguration().get("Sum");

しかし、レデューサーでは値は として返されnullます。

これを実装する方法や、私の側から逃したものはありますか?

4

2 に答える 2

3

私の知る限り、これは不可能です。ジョブ構成は、実行時にjobtrackerによってXMLにシリアル化され、すべてのタスクノードにコピーされます。構成オブジェクトへの変更は、特定のタスクJVMに対してローカルであるそのオブジェクトにのみ影響します。すべてのノードでXMLが変更されるわけではありません。

一般に、「グローバル」状態は避けてください。これはMapReduceパラダイムに反しており、一般的に並列処理を妨げます。MapフェーズとReduceフェーズの間で情報を絶対に渡す必要があり、通常のシャッフル/ソート手順ではそれができない場合は、分散キャッシュに書き込むか、HDFSに直接書き込むことができます。

于 2012-11-05T22:12:47.730 に答える
0

新しい API を使用している場合、コードは理想的に動作するはずです。ジョブ作成の開始時に、この「Sum」プロパティを作成しましたか? たとえば、このように

Configuration conf = new Configuration();
conf.set("Sum", "0");
Job job = new Job(conf);

そうでない場合は、より良い使用

context.getConfiguration().setIfUnset("Sum","100");

マッパークラスで問題を修正します。これは私が見ることができる唯一のものです。

于 2012-11-05T10:11:28.220 に答える