写点什么

架构师训练营 W12 作业

用户头像
Geek_f06ede
关注
发布于: 2021 年 01 月 07 日

分析如下 HiveQL,生成的 MapReduce 执行程序,map 函数输入是什么?输出是什么,reduce 函数输入是什么?输出是什么?


INSERT OVERWRITE TABLE pv_usersSELECT pv.pageid, u.ageFROM page_view pvJOIN user uON (pv.userid = u.userid);
复制代码

SQL 语句是要从 page_view 表和 user 表中查询出每次页面访问所对应的访问者年龄。根据 MapReduce 背后基本的“分治-合并”思想,结合具体的数据表结构,可以得出 Map 和 Reduce 过程各自的输入和输出。

Map

Map 的输入就是两张表中的每条数据。Map 函数的输出中需要选择一个 Key,题目中 JOIN 操作针对的是两张表都有的 userid 字段,因此可以使用 userid 作为 Key,而 value 则是一个元组,其第一项是该条数据来源的表编号,第二项则是该表中该条数据值,对于 page_view 表来说,数据值选择 pageid 字段,而对于 user 表来说,数据值选择 age 字段,这正好对应了 SQL 语句中的 SELECT。


Reduce

在 Map 的输出结果进入到 Reduce 过程之前,还需要经过 Shuffle 处理,即将相同 Key 的数据集合到一起,以此作为 Reduce 的输入。在 Reduce 阶段,对相同 Key 的数据记录执行 JOIN 操作,此时计算量就比初始阶段直接对两张原始的表进行 JOIN 操作要小多了。Reduce 的输出结果即是最终的 pv_users 表,其字段包括 pageid 和 age


作者:浩哥有料

链接:https://www.jianshu.com/p/1c30c6dcf696

来源:简书

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


发布于: 2021 年 01 月 07 日阅读数: 16
用户头像

Geek_f06ede

关注

还未添加个人签名 2019.12.09 加入

还未添加个人简介

评论

发布
暂无评论
架构师训练营W12作业