1
53
我认为雅虎开发者网络的本教程将帮助您: Chaining Jobs
你用的是
不过,我认为上述方法可能是现在较旧的mapred API所采用的方法,但它仍然可以工作。在新的MapReduce API中也有类似的方法,但我不确定它是什么。 只要在作业完成后删除中间数据,就可以在代码中执行此操作。我以前做过的方法是使用类似于:
其中路径是数据在HDF上的位置。您需要确保只有在没有其他作业需要此数据时才删除它。 |
2
17
有很多方法可以做到。 (1) 级联作业 为第一个作业创建jobconf对象“job1”,并设置所有参数,其中“input”为input directory,“temp”为output directory。执行此作业:
在它的正下方,为第二个作业创建jobconf对象“job2”,并设置所有参数,其中“temp”为inputdirectory,“output”为output directory。执行此作业:
(2) 创建两个jobconf对象,并按如下方式设置其中的所有参数 (1) 除了不使用jobclient.run。 然后使用jobconf作为参数创建两个job对象:
使用JobControl对象,可以指定作业依赖项,然后运行作业:
(3) 如果需要类似map+reduce map*的结构,可以使用Hadoop 0.19及更高版本附带的chainmapper和chainreducer类。 干杯 |
3
7
实际上有很多方法可以做到这一点。我集中在两个问题上。 一个是经由浅滩( http://github.com/cwensel/riffle )一个注释库,用于识别依赖的事物并按依赖(拓扑)顺序“执行”。 或者可以在层叠中使用层叠(和mapreduceflow)( http://www.cascading.org/ )未来的版本将支持riffle注释,但现在它对raw jobconf jobs非常有用。 这方面的一个变种是根本不手工管理mr作业,而是使用级联API开发应用程序。然后,jobconf和job chaining通过级联计划器和流类进行内部处理。 通过这种方式,您可以将时间集中在问题上,而不是管理Hadoop作业等机制上。您甚至可以在顶部分层不同的语言(如Clojure或JRuby),以进一步简化您的开发和应用程序。 http://www.cascading.org/modules.html |
4
6
我一个接一个地使用jobconf对象完成了链接工作。我以wordcount为例来链接这些工作。一个作业计算出给定输出中一个单词a重复的次数。第二个作业将第一个作业输出作为输入,并计算出给定输入中的单词总数。下面是需要放在驱动程序类中的代码。
运行这些作业的命令是: 垃圾桶/Hadoop罐总计单词。 我们需要为命令提供最终的作业名称。在上述情况下,它是totalwords。 |
5
5
您可以按照代码中给出的方式运行mr chain。
顺序是
|
6
4
您可以使用Oozie进行Barch处理MapReduce作业。 http://issues.apache.org/jira/browse/HADOOP-5303 |
7
3
ApacheMahout项目中有一些例子将多个MapReduce作业链接在一起。其中一个示例可以在以下位置找到: 推荐人job.java |
8
3
我们可以利用
在我的场景中,我有3个相互依赖的工作。在Driver类中,我使用了下面的代码,它按预期工作。
|
9
2
新的类org.apache.hadoop.mapreduce.lib.chain.chainmapper有助于这个场景。 |
10
1
虽然有复杂的基于服务器的Hadoop工作流引擎,例如OOZIE,但我有一个简单的Java库,它能够执行多个Hadoop作业作为工作流。定义作业间依赖关系的作业配置和工作流在JSON文件中配置。所有东西都是外部配置的,并且不需要在现有的map reduce实现中进行任何更改就可以作为工作流的一部分。 详情可在这里找到。源代码和JAR在GitHub中可用。 http://pkghosh.wordpress.com/2011/05/22/hadoop-orchestration/ 普拉纳布 |
11
1
我认为Oozie可以帮助后续的工作直接从上一个工作中获得信息。这样可以避免使用JobControl执行I/O操作。 |
12
1
如果您想以编程方式链接作业,您将需要使用JobControl。使用非常简单:
然后添加可控的作业实例。ControlledJob定义了一个具有依赖性的作业,从而自动插入输入和输出以适应作业的“链”。
启动链条。你要把它放在一个特殊的线程中。这样可以检查链条运行时的状态:
|
13
0
正如您在需求中提到的,您希望mrjob1的O/P是mrjob2的I/P,等等,您可以考虑对此用例使用oozie工作流。您也可以考虑将中间数据写入HDF,因为它将被下一个mrjob使用。作业完成后,您可以清理中间数据。
|