2013-08-28 49 views
0

我想链接多个mapreduce作业,即先前的mapreduce作业的输出是下一个mapreduce作业的输入。由于我的输出非常大,磁盘IO过载非常重,所以我想寻找替代解决方案来减少IO瓶颈。我找到了ChainMapper/ChainReducer API。该文件提到了以下属性Hadoop ChainMapper和ChainReducer如何减少磁盘IO

“使用ChainMapper和ChainReducer类可以组成Map/Reduce作业,看起来像[MAP +/REDUCE MAP *]。这种模式的直接好处是大大减少了磁盘IO “。

但我不明白为什么使用ChainMapper/ChainReducer会减少磁盘IO。为了减少IO,我应该如何使用这两个API?

回答

0

按照我的理解,即使你有多个映射器,链式映射器将它们视为单个任务。完成任务,没有中间写入。

请参阅javadoc中的以下声明。

Mapper类以链接(或管道)方式调用,第一个的输出成为第二个的输入,依此类推,直到最后一个Mapper,最后一个Mapper的输出将写入任务的输出。