Pipeling hadoop map减少了工作量

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

谢谢

您可能会发现JobControl是将这些作业链接在一起的最简单方法。 对于更复杂的工作流程,我建议您查看Oozie 。

嗨,我有类似的要求一种方法是这样做

提交第一份工作后执行以下

Job job1 = new Job( getConf() ); job.waitForCompletion( true ); 

然后使用检查状态

 if(job.isSuccessful()){ //start another job with different Mapper. //change config Job job2 = new Job( getConf() ); } 

Oozie是您的解决方案。 您可以通过Oozie的动作标签提交map-reduce类型的作业,hive作业,pig作业,系统命令等。

它甚至还有一个协调员,可以作为您工作流程的cron。

另一种可能性是Cascading ,它还在Hadoop之上提供了一个抽象层:它似乎提供了一个与Hadoop概念密切配合的类似组合,但却让人们可以轻松地完成M / R重量提升使用Oozie工作流调用Pig脚本。

对于你的用例,我认为Oozie会很好。 Oozie是一个工作流调度程序,您可以在其中编写不同的操作(可以是map-reduce,java,shell等)来执行一些计算,转换,丰富等。对于这种情况:

行动A:i / p输入o / pa

行动B:i / pao / pb

动作C:i / pbo / pc(最终输出)

您最终可以在HDFS中保留c,并可以决定保留或删除中间输出。

如果你想在一个动作中完成所有三个动作的计算,那么你可以使用Cascading。 您可以通过他们的官方文档更好地了解Cascading,您也可以参考我的博客: https : //tech.flipkart.com/expressing-etl-workflows-via-cascading-192eb5e7d85d