多数のユーザー間で共有されるHadoopクラスターを管理しています。私たちは頻繁に非常に遅いマッパーでジョブを実行します。たとえば、NLP解析したい32 GBのセンテンスファイル(1行に1センテンス)があるとします(これには、センテンスあたり100ミリ秒かかります)。ブロックサイズが128MBの場合、これは250マッパーです。これは私たちのかなり小さなクラスターを埋めます(9ノード×ノードあたり12マッパーは108マッパーです)が、各マッパーは完了するのに非常に長い時間(時間)かかります。
問題は、クラスターが空でそのようなジョブが開始された場合、クラスター上のすべてのマッパーを使用することです。次に、他の誰かが短いジョブを実行したい場合、それは何時間もブロックされます。新しいバージョンのHadoopはFairSchedulerでプリエンプションをサポートしていることを知っていますが(Capacity Schedulerを使用しています)、新しいバージョンも安定していません(次のリリースを待ち望んでいます)。
以前はマッパーの数を指定するオプションがありましたが、現在JobConfは非推奨になっています(奇妙なことに、0.20.205では非推奨ではありません)。これにより、マッパーが増えると、各マップタスクがより小さなデータセットで機能し、より早く終了するため、問題が軽減されます。
0.20.203でこの問題を回避する方法はありますか?InputFormat(この場合はTextInputFormat)をサブクラス化する必要がありますか?もしそうなら、私は正確に何を指定する必要がありますか?