现在我有一个4阶段的MapReduce作业,如下所示:
Input-> Map1 -> Reduce1 -> Reducer2 -> Reduce3 -> Reduce4 -> Output
我注意到Hadoop中有一个ChainMapper
类,它可以将几个映射器链成一个大的映射器,并节省映射阶段之间的磁盘I/O成本。也有一个ChainReducer
级,但它不是一个真正的"链轮减速机"。它只能支持如下作业:
[Map+/ Reduce Map*]
我知道我可以为我的任务设置四个MR作业,并为最后三个作业使用默认映射器。但是这将花费大量的磁盘I/O,因为reducer应该将结果写入磁盘,以便下面的映射器访问它。有没有其他的Hadoop内置功能来链接我的reducer来降低I/O成本?
我使用Hadoop 1.0.4.
我不认为你可以把一个减速器的o/p直接给另一个减速器。我会选择这个:
Input-> Map1 -> Reduce1 ->
Identity mapper -> Reducer2 ->
Identity mapper -> Reduce3 ->
Identity mapper -> Reduce4 -> Output
在Hadoop 2中。X系列,内部可以使用ChainMapper在减速机前进行链映射,使用ChainReducer在减速机后进行链映射。