0

Hadoop ストリーミングを使用して、特定の時間にジョブで実行されるマッパーの数を制限することはできますか? たとえば、ノードごとに 1 つのタスクを実行できる 28 ノードのクラスターがあります。100 個のタスクを含むジョブがある場合、いつでも 28 個のノードのうち、たとえば 20 個のみを使用したいと考えています。長時間実行されるタスクが多数含まれている可能性があるため、いくつかのジョブを制限したいと思います。また、長時間実行されるジョブが終了するのを待つのではなく、より高速に実行されるジョブを実行して、すぐに実行できるようにしたい場合もあります。

この質問を見ましたが、タイトルは適切ですが、回答はこの特定の問題に対処していないようです。

ありがとう!

4

2 に答える 2

1

「ノードごとの」容量スケジューリングについては知りませんが、非常によく似たケース用に構築された代替スケジューラがあります: 容量スケジューラ.

http://hadoop.apache.org/common/docs/r0.19.2/capacity_scheduler.html

潜在的に長いジョブ用に特別なキューを定義し、短いジョブ用にキューを定義する必要があります。このスケジューラーは、各キューのジョブに常に使用できる容量を確保するようにします。

于 2012-03-06T14:14:33.427 に答える
0

次のオプションは、各マッパーの作業量が相当量である場合に有効です。この戦略には、各マップ呼び出しで最大 20 個のカウンターを読み取るオーバーヘッドが含まれるためです。

カウンターのグループを作成し、グループ名を MY_TASK_MAPPERS にします。キーを MAPPER<1..K> に等しくします。ここで、K は必要なマッパーの最大数です。次に、Mapper でカウンタの 1 つが 0 になるまで繰り返します。マシンのドットなしの IP アドレスを long 値としてカウンタに配置し、その 1 台のマシンをそのマッパーに効果的に割り当てます。代わりに、すべての K が既に使用されている場合は、何もせずにマッパーを終了します。

于 2013-03-03T02:40:00.083 に答える