架构师训练营 week12 课后作业
作业一:
(至少完成一个)
在你所在的公司(行业、领域),正在用大数据处理哪些业务?可以用大数据实现哪些价值?
分析如下 HiveQL,生成的 MapReduce 执行程序,map 函数输入是什么?输出是什么,reduce 函数输入是什么?输出是什么?
INSERT OVERWRITE TABLE pv_users
SELECT pv.pageid, u.age
FROM page_view pv
JOIN user u
ON (pv.userid = u.userid);
page_view 表和 user 表结构与数据示例如下
解答:
该 HiveQL 语句是查询所有<pageid, age>的组合,而这两个信息分属不同的表,将这两者连接在一起的是 userid。
map 函数输入的是两张表的每行数据,假设 page_view 为表 1,user 为表 2。
既然要处理两个表的数据,那么会有两个 Map()函数,
第一个 Map()函数统计 page_view 表。它的输入<key, value>中 value 是 page_view 的数据记录,输出的<key, value>中,key 是 userid,value 是表名和 pageid 的组合;
第二个 Map()函数统计 user 表。它的输入<key, value>中 value 是表记录,输出<key, value>中 key 是 userid,value 是表名和 age 的组合。
用 userid 做为 Map()函数输出<key, value>中的 key 是一个关键信息,因为在 Shuffle 过程中需要用 userid 来将 Map()的输出数据分类组合,然后传给 Reduce()函数中。Reduce()函数的输入<key, values>中 key 是 userid,values 是来自于表 1 的 pageid 或者是来自于表 2 的 age。Reduce()函数将这些信息整合,得到的输出<key, value>中 value 就是所有 pageid 和 age 的组合,也就是 HiveQL 查询想要得到的结果。至此,MapReduce 过程结束,实现了 HiveQL 的查询结果。
过程如下:
版权声明: 本文为 InfoQ 作者【花果山】的原创文章。
原文链接:【http://xie.infoq.cn/article/2906248140afdd087fe92f180】。未经作者许可,禁止转载。
评论