あるステップの出力が次のステップの入力に供給されるように、複数の Hadoop ジョブをチェーンする方法を見つけようとしています。グーグルで見つけた多くのことは、単一のスレッドから一度に1つずつ呼び出して完了を待つか、 Job.addDependingJob() を使用してから送信する必要があることを示しています。後者を選択しましたが、前のジョブが終了した後に後続のジョブを実行できないようです。
これが私のコードです:
List<Job> jobs = new ArrayList<Job>();
for(int i = 0; i < stepCount; i++) {
JobConf jc = new JobConf(clusterConfig);
... set up mappers and reducers here ...
... set up input and output paths here ...
Job j = new Job(jc);
j.addDependingJob(jobs.get(jobs.size() - 1);
jobs.add(j);
}
for(Job j : Jobs) {
JobClient client = new JobClient();
client.init(j.getJobConf());
client.submit(j.getJobConf());
}
すべてのジョブが一度に実行され、次のような出力が得られます。
- ジョブ jar ファイルが設定されていません。ユーザー クラスが見つからない可能性があります。JobConf(Class) または JobConf#setJar(String) を参照してください。
- 処理する合計入力パス: 1
- 引数の解析には GenericOptionsParser を使用します。アプリケーションは、同じツールを実装する必要があります。
- ジョブ jar ファイルが設定されていません。ユーザー クラスが見つからない可能性があります。JobConf(Class) または JobConf#setJar(String) を参照してください。
- プロセスへの合計入力パス: 0
- 引数の解析には GenericOptionsParser を使用します。アプリケーションは、同じツールを実装する必要があります。
- ジョブ jar ファイルが設定されていません。ユーザー クラスが見つからない可能性があります。JobConf(Class) または JobConf#setJar(String) を参照してください。
- プロセスへの合計入力パス: 0
- 引数の解析には GenericOptionsParser を使用します。アプリケーションは、同じツールを実装する必要があります。
- ジョブ jar ファイルが設定されていません。ユーザー クラスが見つからない可能性があります。JobConf(Class) または JobConf#setJar(String) を参照してください。
- プロセスへの合計入力パス: 0
私は何を間違っていますか?
注: Hadoop 0.20.205 を使用しています
明確にするために編集:ジョブチェーンをクラスターに送信し、ジョブチェーンが完了するのを待たずにすぐに戻ることができる必要があります。