Hadoop ChainMapper和ChainReducer如何减少磁盘IO

Hadoop ChainMapper和ChainReducer如何减少磁盘IO,hadoop,Hadoop,我想链接多个mapreduce作业,即上一个mapreduce作业的输出是下一个mapreduce作业的输入。因为我的输出非常大,而且磁盘IO过载非常严重,所以我想找到替代解决方案来减少IO瓶颈。我找到了ChainMapper/ChainReducer API。该文件提到了以下属性 “使用ChainMapper和ChainReducer类可以组成类似于[Map+/Reduce Map*]的Map/Reduce作业。这种模式的直接好处是大大减少了磁盘IO。” 但我不太明白为什么使用ChainMap

我想链接多个mapreduce作业,即上一个mapreduce作业的输出是下一个mapreduce作业的输入。因为我的输出非常大,而且磁盘IO过载非常严重,所以我想找到替代解决方案来减少IO瓶颈。我找到了ChainMapper/ChainReducer API。该文件提到了以下属性

“使用ChainMapper和ChainReducer类可以组成类似于[Map+/Reduce Map*]的Map/Reduce作业。这种模式的直接好处是大大减少了磁盘IO。”


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

根据我的理解,即使您有多个映射器,chain mapper也会将它们视为单个任务。在任务完成之前,没有中间写入

请参阅javadoc中的以下语句

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