我想链接多个mapreduce作业,即先前mapreduce作业的输出是下一个mapreduce作业的输入。因为我的输出非常大而且磁盘IO过载非常繁重,所以我想找到替代解决方案来减少IO瓶颈。我找到了ChainMapper / ChainReducer API。该文件提到了以下属性
"使用ChainMapper和ChainReducer类可以组合看起来像[MAP + / REDUCE MAP *]的Map / Reduce作业。这种模式的直接好处是磁盘IO的大幅减少。"
但我不太明白为什么使用ChainMapper / ChainReducer会减少磁盘IO。为了减少IO,我应该如何使用这两个API?
答案 0 :(得分:0)
根据我的理解,即使您有多个映射器,链映射器也会将它们视为单个任务。任务完成后,没有中间写入。
请参阅javadoc的以下声明。
Mapper类以链式(或管道)方式调用,第一个的输出成为第二个的输入,依此类推,直到最后一个Mapper,最后一个Mapper的输出将被写入任务的输出