我有五个map reduce我分别运行。我想把它们一起管道。因此,一份工作的输出转到下一份工作。目前,我编写了shell脚本来执行它们。有没有办法在java中写这个?请举例说明。
谢谢
答案 0 :(得分:3)
您可能会发现JobControl是将这些作业链接在一起的最简单方法。对于更复杂的工作流程,我建议您查看Oozie。
答案 1 :(得分:2)
您好 我有类似的要求 一种方法是
提交第一份工作后执行
Job job1 = new Job( getConf() );
job.waitForCompletion( true );
然后使用
检查状态if(job.isSuccessful()){
//start another job with different Mapper.
//change config
Job job2 = new Job( getConf() );
}
答案 2 :(得分:1)
Oozie是您的解决方案。您可以通过Oozie的动作标签提交map-reduce类型的作业,hive作业,pig作业,系统命令等。
它甚至还有一个协调员,可以作为您工作流程的cron。
答案 3 :(得分:0)
另一种可能性是Cascading,它还在Hadoop之上提供了一个抽象层:它似乎提供了一个与Hadoop概念密切配合的类似组合,但让-ooop-do-the-M /使用调用Pig脚本的Oozie工作流程获得R-heavy举重。
答案 4 :(得分:0)
对于您的用例,我认为Oozie会很好。 Oozie是一个工作流调度程序,您可以在其中编写不同的操作(可以是map-reduce,java,shell等)来执行一些计算,转换,扩充等操作。对于这种情况:
动作A:i / p输入o / p a
动作B:i / p a o / p b
动作C:i / p b o / p c(最终输出)
您最终可以将c保留在HDFS中,并可以决定保留或删除中间输出。
如果要一次完成所有三个动作的计算,则可以使用层叠。您可以通过他们的官方文档更好地了解Cascading,也可以在同一博客上引用我的博客:https://tech.flipkart.com/expressing-etl-workflows-via-cascading-192eb5e7d85d