默认情况下,在EMR作业期间,实例配置为具有比映射器更少的缩减器。但减速器没有任何额外的记忆,所以看起来他们应该能够有相同的数量。 (例如,超大型高CPU实例有7个映射器,但只有2个降级器,但映射器和缩减器都配置了512 MB可用内存)。
有谁知道为什么会这样,是否有某些方法我可以指定使用尽可能多的缩减器作为映射器?
编辑:我错了,它是512 MB
答案 0 :(得分:3)
Mappers从输入流(映射器的STDIN)中提取数据,它们发出的内容更加紧凑。然后,该出站流(映射器的STDOUT)也按密钥排序。因此,Reducer在其传入中具有较小的排序数据。
这就是为什么任何Hadoop MapReduce集群(而不仅仅是EMR)的默认配置都要有比映射器更多的映射器,与jobtracker可用的核心数量成比例。
您可以通过jobconf参数控制映射器和缩减器的数量。配置变量是mapred.map.tasks和mapred.reduce.tasks。