管道hadoop mapreduce工作

时间:2010-10-15 06:33:26

标签: java programming-languages hadoop mapreduce

我有五个map reduce我分别运行。我想把它们一起管道。因此,一份工作的输出转到下一份工作。目前,我编写了shell脚本来执行它们。有没有办法在java中写这个?请举例说明。

谢谢

5 个答案:

答案 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