架构师训练营 W12 作业
分析如下 HiveQL,生成的 MapReduce 执行程序,map 函数输入是什么?输出是什么,reduce 函数输入是什么?输出是什么?
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
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
版权声明: 本文为 InfoQ 作者【Geek_f06ede】的原创文章。
原文链接:【http://xie.infoq.cn/article/533675eade75a3cad95260244】。未经作者许可,禁止转载。
评论