现在我有一个4阶段MapReduce作业如下:
Input-> Map1 -> Reduce1 -> Reducer2 -> Reduce3 -> Reduce4 -> Output
我注意到Hadoop中有ChainMapper
类可以将多个映射器链接到一个大映射器,并在映射阶段之间保存磁盘I / O成本。还有一个ChainReducer
类,但它不是真正的“减速器”。它只能支持以下工作:
[Map+/ Reduce Map*]
我知道我可以为我的任务设置四个MR作业,并使用默认的映射器来完成最后三个作业。但是这将耗费大量磁盘I / O,因为reducers应该将结果写入磁盘,让以下映射器访问它。是否还有其他Hadoop内置功能可以将我的Reducer连接起来以降低I / O成本?
我正在使用Hadoop 1.0.4。
答案 0 :(得分:2)
我不认为你可以将减速器的o / p直接用于另一个减速器 。我本来会这样做的:
Input-> Map1 -> Reduce1 ->
Identity mapper -> Reducer2 ->
Identity mapper -> Reduce3 ->
Identity mapper -> Reduce4 -> Output
在Hadoop 2.X系列中,您可以在内部使用ChainMapper在reducer之前链接映射器,在使用ChainReducer的reducer之后链接映射器。