学习Mapreduce:做计数的是reducer还是mapper
Learning Mapreduce: is it the reducer that does count or the mapper
在由select count(*) from products where id = 2
组成的mapreduce作业中,count(*)
操作发生在哪里,是在mapper还是在reducer?
可以是mapper和reducer,也可以是reducer only aggregation
启用地图端聚合:
hive.map.aggr=true;
数据将在每个映射器上使用 Hash table 预先聚合(在拆分处理的范围内)。 Reducer 将对从 mapper 收到的部分结果进行最终聚合。
映射器将输出 (#{token}, #{token_count})
对。 Hadoop 框架再次对这些对进行排序,reducer 对值求和以生成每个标记的总计数。在这种情况下,每次刷新映射时,映射器将为每个标记输出一行,而不是为每个标记的每次出现输出一行。权衡是他们需要在内存中保留所有令牌的映射。
如果关闭 map 端聚合:hive.map.aggr=false
,mapper 将过滤行并将它们发送到 reducer,reducer 将进行聚合,这会导致高网络 IO。
阅读有关 Map-side Aggregation in Hive. 的更多详细信息
另见相关
在由select count(*) from products where id = 2
组成的mapreduce作业中,count(*)
操作发生在哪里,是在mapper还是在reducer?
可以是mapper和reducer,也可以是reducer only aggregation
启用地图端聚合:
hive.map.aggr=true;
数据将在每个映射器上使用 Hash table 预先聚合(在拆分处理的范围内)。 Reducer 将对从 mapper 收到的部分结果进行最终聚合。
映射器将输出 (#{token}, #{token_count})
对。 Hadoop 框架再次对这些对进行排序,reducer 对值求和以生成每个标记的总计数。在这种情况下,每次刷新映射时,映射器将为每个标记输出一行,而不是为每个标记的每次出现输出一行。权衡是他们需要在内存中保留所有令牌的映射。
如果关闭 map 端聚合:hive.map.aggr=false
,mapper 将过滤行并将它们发送到 reducer,reducer 将进行聚合,这会导致高网络 IO。
阅读有关 Map-side Aggregation in Hive. 的更多详细信息
另见相关