2

map reduce ジョブ クラスに静的オブジェクトがあり、(メイン メソッドで) 1 回初期化してから、すべてのマッピングで関数を呼び出します。したがって、変数として宣言するこのオブジェクト MyObject があります。

static MyObject obj;

私のメイン関数では、ジョブを開始する前に次のように呼び出します。

obj = new MyObject();
obj.init();

そして、マップ関数で呼び出したい:

obj.execute();

しかし、何らかの理由でこれを試すと、null ポインター例外が発生します (obj が null であると表示されます)。メイン関数で初期化すると、マッパーはそれを初期化済みと見なすべきではありませんか? マッパーは静的変数を認識していますか?

4

3 に答える 3

3

main() はすべてのノードで呼び出されるわけではなく、ジョブを開始した場所でのみ実行されます。静的オブジェクトにアクセスするには、マッパーのインスタンス化時に初期化する必要があります。そうすれば、マップ タスクを実行するすべてのノードで初期化が行われます。

しかし、あなたが達成しようとしていることを行う別の方法があるかもしれないので、問題は、この静的オブジェクトが何をするかということです。

于 2012-10-17T14:47:34.657 に答える
0

私のオブジェクトは実際にはライブラリをロードしていたので、最終的には分散キャッシュを使用し、M/R メソッドでオブジェクトをインスタンス化するだけになりました。

于 2012-10-18T18:16:46.947 に答える