我正在尝试在Hadoop中将多个作业链接到一个作业中(我使用的是API版本1.2.1)。我偶然发现一篇关于这个主题的文章,请看这里。
我的主要课程如下:http://pastebin.com/C21PKM1j(我做了一个小的清理和重新排列,使它更可读)我正在使用Cloudera演示虚拟机。在我使用链接之前,我的简单工作效果很好。这个版本只在10-20秒内完成,没有任何错误和日志文件中的任何有价值的信息。我很确定没有一份工作真正开始,但我不明白为什么。
EDIT:根本没有创建输出目录。
编辑:我在代码中包含了jobRunner和handleRun片段,以便从这里进行调试。它运行两次迭代(我看到两次"Still running"),然后正常退出。
编辑:我像老板一样搜索了好几个小时。似乎有许多"有效"的例子,hadoop版本和正确的API调用会出现问题(hadoop-core.jar中出现了许多同名的类)
这个答案可能会对您有所帮助。基于您正在使用的API,您必须使用setMapperClass和setReducerClass不断更改映射和减少类,并提交作业。此外,如果您想将上一个作业的输出作为下一个的输入,请使用字符串变量动态地给出输出路径。(如果你不想要这个部分,你可以去写脚本)
String input=args[0];
String out=args[1];
String output = out+"job1";
public static String OUTPUT_FILE_NAME = "/part-00000";
以下是旧的API
/*code for changing mapper and reducer classes*/
FileInputFormat.setInputPaths(conf, new Path(input));
FileOutputFormat.setOutputPath(conf, new Path(output));
JobClient.runJob(conf);
input= output+OUTPUT_FILE_NAME;
output = out + "job2";
......
......