psabbate の回答により、欠けていた API のいくつかの部分を見つけることができました。これが私がそれを解決した方法です:
ドライバー クラスで、次のようなコードでジョブを開始します。
List<RunningJob> runningJobs = new ArrayList<RunningJob>();
for (String jobSpec: jobSpecs) {
// Configure, for example, a params map that gets passed into the MR class's constructor
ToolRunner.run(new Configuration(), new MapReduceClass(params, runningJobs), null);
}
for (RunningJob rj: runningJobs) {
System.err.println("Waiting on job "+rj.getID());
rj.waitForCompletion();
}
次に、MapReduceClass でプライベート変数List<RunningJob> runningJobs
を定義し、コンストラクターを次のように定義します。
public MergeAndScore(Map<String, String> p, List<RunningJob> rj) throws IOException {
params = Collections.unmodifiableMap(p);
runningJobs = rj;
}
そして、呼び出すrun()
メソッドで、あなたを定義し、ジョブを送信しますToolRunner
JobConf
JobClient jc = new JobClient();
jc.init(conf);
jc.setConf(conf);
runningJobs.add(jc.submitJob(conf));
これにより、すぐに戻り、ドライバークラスrun()
のオブジェクトを介してジョブにアクセスできます。runningJobs
私は古いバージョンの Hadoop で作業しているため、セットアップによってはjc.init(conf)
and/orjc.setConf(conf)
が必要な場合とそうでない場合がありますが、おそらく少なくとも 1 つが必要であることに注意してください。