2012-05-07 10 views
12

JVMを再利用するために、「mapred.job.reuse.jvm.num.tasks」プロパティを設定できることはわかっています。私の質問は次のとおりです:Hadoopのマップ再作成ジョブでJVMを再利用

(1)ここで設定するタスクの数、-1などの正の整数を決める方法は?

(2)既にJVMを再利用し、mapreduceジョブでこのプロパティを-1に設定することをお勧めしますか?

ありがとうございました!

答えて

19

お互いに確実に実行されている非常に小さなタスクがある場合は、このプロパティを-1に設定すると便利です(スポーンされたJVMは無制限に再利用されます)。 だから、(あなたの仕事に利用できるあなたのクラスタの仕事の数) - (仕事の数)-JVMsの代わりにJVMs。

これは、パフォーマンスが大幅に向上しています。長時間実行されているジョブでは、新しいJVMを設定するための比較のランタイムの割合は非常に低いので、パフォーマンスが大幅に向上するわけではありません。

また、長時間実行されるタスクでは、パフォーマンスを低下させるヒープフラグメンテーションなどの問題があるため、タスクプロセスを再作成することをお勧めします。

さらに、中途半端に実行されているジョブがある場合は、タスクのうち2-3だけを再利用して、良いトレードオフを持つことができます。

+0

uberのタスクを有効にすると、マッパーと同じJVMを共有できますか?それとも、マッパーが同じJVMを共有でき、レデューサーが同じJVMを共有できるか? – MikA

1

JVMの再起動(MR1でのみ可能)は、JVMの起動遅延を取り除くために役立ちますが、それは限界があり、多くの短所があります(読み取り時の副作用)。ほとんどのタスクは長時間実行されますこれらのタスクの実行時間を見ると、数十秒または数分(数十秒または数分)の起動時間が問題になることはありません。ヒープは完全にはきれいではありません(以前の実行から断片化されています)。断片化はより多くのGCにつながり、すべての起動時間の利益を無効にする可能性があります。タスク用の新しいJVMを開始する(タスクがかなり小さい場合)MR2(YARN)では、新しいJVMは常にタスク用に開始され、Uberタスクの場合はローカルJVMでのみタスクが実行されます

関連する問題