我知道map阶段的结果是一个中间结果,它将是reduce阶段的输入。
最近,我在hadoop权威指南中读到"map -task的结果存储在磁盘中(即不在HDFS中,因为它们是中间结果),只有reduce阶段的结果存储在HDFS"。
所以,在上面的句子中,我的理解是,如果有一个Map-task,那么也应该有一个reduce task。因为map-task的结果只是一个中间结果,为了将这些结果存储到HDFS,应该有一个reduce-task。我的理解对吗?如果我的理解是错误的,那么有人能给我一个场景,那里可以有1个地图任务和0个减少任务?
在Map Reduce中,并不是所有的Reduce阶段都需要。在转换中,输入需要转换的地方不需要reducer。
在这些场景中,没有一个reducer将被定义为0,或者-reducer选项将被设置为None。在这种情况下,mapper输出将存储在HDFS中。
是,当存在零减速器时,map任务的输出不是中间输出而是最终输出。在这种情况下,不会进行洗牌,分区也不会发生。mapper的纯输出被写入磁盘。
为了方便未来的读者:在hadoop生态系统(2.7.1 - Tez执行框架)中,我工作的是提取作业,从Flatfile、数据库和CloudApps(如salesforce)读取数据到HDFS,这些作业不执行任何数据转换,只有Map任务,没有reduce任务。并且在设置中没有强制执行默认减数器。