私の Hadoop バージョンは 1.0.2 です。現在、同時に実行するマップ タスクは最大 10 個です。この質問に関連する 2 つの変数が見つかりました。
a) mapred.job.map.capacity
しかし、私の Hadoop バージョンでは、このパラメーターは放棄されているようです。
b) mapred.jobtracker.taskScheduler.maxRunningTasksPerJob (http://grepcode.com/file/repo1.maven.org/maven2/com.ning/metrics.collector/1.0.2/mapred-default.xml)
この変数を次のように設定します。
Configuration conf = new Configuration();
conf.set("date", date);
conf.set("mapred.job.queue.name", "hadoop");
conf.set("mapred.jobtracker.taskScheduler.maxRunningTasksPerJob", "10");
DistributedCache.createSymlink(conf);
Job job = new Job(conf, "ConstructApkDownload_" + date);
...
問題は、それが機能しないことです。ジョブの開始時にまだ 50 を超えるマップが実行されています。
Hadoop ドキュメントを調べた後、同時実行マップ タスクを制限する別のドキュメントが見つかりません。誰かが私を助けてくれることを願っています、ありがとう。
=====================
私はこの質問についての答えを見つけました。ここで、興味のある他の人に共有してください。
割り当てファイル (fair-scheduler.xml) で、プールの最大同時タスク スロットを設定する構成パラメーター maxMaps を使用して、公平なスケジューラーを使用します。次に、ジョブを送信するときに、ジョブのキューを対応するプールに設定するだけです。