首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Hadoop中链接多个MapReduce作业

在Hadoop中链接多个MapReduce作业
EN

Stack Overflow用户
提问于 2010-03-23 19:55:15
回答 14查看 87.7K关注 0票数 126

在许多实际应用MapReduce的情况下,最终的算法都是几个MapReduce步骤。

即Map1、Reduce1、Map2、Reduce2等。

因此,您拥有上一次reduce的输出,该输出需要作为下一个map的输入。

一旦管道成功完成,您(通常)不希望保留中间数据。另外,因为这些中间数据通常是某种数据结构(如“map”或“set”),所以您不希望在写入和读取这些键值对时花费太多精力。

在Hadoop中,推荐的方法是什么?

有没有一个(简单的)例子来说明如何以正确的方式处理这些中间数据,包括事后的清理?

EN

回答 14

Stack Overflow用户

回答已采纳

发布于 2010-03-25 06:31:25

我认为雅虎开发者网络上的这篇教程会对你有所帮助:Chaining Jobs

您可以使用JobClient.runJob()。第一个作业的数据的输出路径成为第二个作业的输入路径。这些参数需要作为参数传递给您的作业,并使用适当的代码来解析它们并为作业设置参数。

我认为上面的方法可能是现在较旧的mapred API所采用的方法,但它应该仍然有效。在新的mapreduce API中会有一个类似的方法,但我不确定它是什么。

至于在作业完成后删除中间数据,您可以在代码中做到这一点。我以前做过的方法是使用如下的东西:

代码语言:javascript
运行
复制
FileSystem.delete(Path f, boolean recursive);

其中路径是数据在HDFS上的位置。您需要确保仅在没有其他作业需要此数据时才将其删除。

票数 58
EN

Stack Overflow用户

发布于 2010-07-04 01:15:30

有很多方法可以做到这一点。

(1)级联作业

为第一个作业创建JobConf对象job1,并设置所有参数,输入目录为输入目录,输出目录为temp。执行此作业:

代码语言:javascript
运行
复制
JobClient.run(job1).

紧接其下,为第二个作业创建JobConf对象"job2“,并设置所有参数,其中"temp”为输入目录," output“为输出目录。执行此作业:

代码语言:javascript
运行
复制
JobClient.run(job2).

(2)创建两个JobConf对象并设置其中的所有参数,就像(1)一样,只是您不使用JobClient.run。

然后创建两个以jobconfs为参数的Job对象:

代码语言:javascript
运行
复制
Job job1=new Job(jobconf1); 
Job job2=new Job(jobconf2);

使用jobControl对象,您可以指定作业依赖关系,然后运行作业:

代码语言:javascript
运行
复制
JobControl jbcntrl=new JobControl("jbcntrl");
jbcntrl.addJob(job1);
jbcntrl.addJob(job2);
job2.addDependingJob(job1);
jbcntrl.run();

(3)如果您需要某种类似于Map+ | Reduce | Map*的结构,您可以使用随Hadoop0.19版及更高版本提供的ChainMapper和ChainReducer类。

票数 21
EN

Stack Overflow用户

发布于 2010-03-27 03:25:43

实际上,有很多方法可以做到这一点。我将集中在两个方面。

一种是通过Riffle ( http://github.com/cwensel/riffle ),这是一个注释库,用于识别依赖的事物并按依赖(拓扑)顺序“执行”它们。

或者,您可以在级联( http://www.cascading.org/ )中使用级联(和MapReduceFlow)。未来的版本将支持Riffle注解,但它现在可以很好地处理原始的MR JobConf作业。

它的一个变体是根本不需要手动管理MR作业,而是使用级联API开发应用程序。然后,通过级联计划器和流类在内部处理JobConf和作业链接。

通过这种方式,您可以将时间花在您的问题上,而不是管理Hadoop作业等的机制上。您甚至可以在顶部分层不同的语言(如clojure或jruby),以进一步简化您的开发和应用程序。http://www.cascading.org/modules.html

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2499585

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档