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