【问题标题】:Learning Mapreduce: is it the reducer that does count or the mapper学习 Mapreduce:是 reducer 还是 mapper
【发布时间】:2020-10-05 22:46:52
【问题描述】:

在一个由select count(*) from products where id = 2组成的mapreduce作业中,count(*)操作发生在哪里,是在mapper还是reducer?

【问题讨论】:

标签: hadoop hive mapreduce hiveql


【解决方案1】:

既可以是mapper又可以是reducer,也可以是reducer唯一的聚合。

启用地图端聚合:

 hive.map.aggr=true;

数据将使用哈希表在每个映射器上预先聚合(在拆分处理的范围内)。 Reducer 将对从 mapper 收到的部分结果进行最终聚合。

映射器将输出对 (#{token}, #{token_count})。 Hadoop 框架再次对这些对进行排序,reducers 将这些值相加以产生每个令牌的总计数。在这种情况下,映射器将在每次刷新映射时为每个标记输出一行,而不是为每个标记的每次出现输出一行。权衡是他们需要在内存中保留所有令牌的映射。

如果关闭了map端聚合:hive.map.aggr=false,mapper会过滤行并将它们发送到reducer,reducer会进行聚合,这会导致高网络IO。

阅读更多关于Map-side Aggregation in Hive.的详细信息 另见相关https://stackoverflow.com/a/61772631/2700344

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-04-16
    • 1970-01-01
    • 2011-02-14
    • 2018-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多