写点什么

架构师训练营第 1 期 - week12 - 作业

用户头像
lucian
关注
发布于: 2020 年 12 月 13 日

问题 2



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


整体过程




Map 函数



page_view &和 user 两表的 JOIN 操作是通过 userid 关联的,所以 Map 操作的 key 为 userid



page_view 表




  • map 函数输入参数(key,value,contex)

- key :value 所在的偏移量

- value: page_view 表中的一行

- context:mapreduce 的上下文



  • map 函数输出 List<Item>



输出是一个集合,其中集合的每个元素 item 是一根 key,value 键值对



- key: userid 的值



- value:是一个键值对,这个键值对的 key 是表 id(这里用 1 代替),值是 pageid,即:




user 表




  • map 函数输入参数(key,value,contex)



- key :value 所在的偏移量

- value: user 表中的一行

- context:mapreduce 的上下文



  • map 函数输出 List<Item>



输出是一个集合,其中集合的每个元素 item 是一根 key,value 键值对



- key: userid 的值

- value:是一个键值对,这个键值对的 key 是表 id(这里用 2 代替),值是 age,即



输出如下所示:




Shuffle



Shuffle 会将上述 两张表的 map 输出结构按 userid 排序以及分组,生成如下两张表的内容再交给不同的 Reduce 服务计算:







Reduce



  • 输入



输入是 shuffle 函数的输出,即(key,values,contex)



- key :userId

- values:List<TableId, AgeOrPageId>

- context:mapreduce 的上下文



  • 输出 List<PageId,Age>



在输入的 values 中,pageid 一定是表 1 的数据,age 是表 2 的数据



所以只需要从 values 中过滤出 ages 和 pageIds 两个数组,然后对两个数组进行组合



- 第一个 map[1,2]和[25]组合得到[1,25]和[2,25]



- 第二个 map[1]和[32]组合得到[1,32]



最后结果为




用户头像

lucian

关注

还未添加个人签名 2018.03.13 加入

还未添加个人简介

评论

发布
暂无评论
架构师训练营第 1 期 - week12 - 作业