我试图弄清楚如何链接多个 hadoop 作业,将一个步骤的输出馈送到下一步的输入。我通过谷歌搜索发现的很多东西说我应该从单个线程一次调用它们并等待完成,或者我应该使用 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
编辑澄清:我需要能够向集群提交作业链,然后立即返回,而无需等待作业链完成。