架构师训练营第 1 期 - week12 - 作业
问题 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]
最后结果为
评论