したがって、ジョブ A とジョブ B の 2 つのジョブがあります。ジョブ A については、ノードごとに最大 6 つのマッパーを使用したいと考えています。ただし、ジョブ B は少し異なります。ジョブ B では、ノードごとに 1 つのマッパーしか実行できません。この理由は重要ではありません。この要件は交渉の余地がないとだけ言っておきましょう。Hadoop には、「ジョブ A の場合、ノードあたり最大 6 つのマッパーをスケジュールしますが、ジョブ B の場合、ノードあたり最大 1 つのマッパーをスケジュールします」と伝えたいと思います。これはまったく可能ですか?
私が考えることができる唯一の解決策は次のとおりです。
1) メインの Hadoop フォルダーから conf.JobA と conf.JobB の 2 つのフォルダーを作成します。各フォルダーには、mapred-site.xml の独自のコピーがあります。conf.JobA/mapred-site.xml の mapred.tasktracker.map.tasks.maximum の値は 6 です。conf.JobB/mapred-site.xml の mapred.tasktracker.map.tasks.maximum の値は 1 です。
2) ジョブ A を実行する前に:
2a) タスクトラッカーをシャットダウンする
2b) conf.JobA/mapred-site.xml を Hadoop の conf フォルダーにコピーし、既にそこにあった mapred-site.xml を置き換えます。
2c) タスクトラッカーを再起動する
2d) タスクトラッカーの起動が完了するまで待ちます
3) ジョブ A を実行する
ジョブ B を実行する必要がある場合は、同様のことを行います。
私はこの解決策が本当に好きではありません。それは無愛想で失敗しやすいようです。私がする必要があることを行うためのより良い方法はありますか?