写点什么

架构师训练营第十二周作业

用户头像
zamkai
关注
发布于: 2021 年 02 月 21 日

分析如下 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);


Mapper

Join 过程涉及到两个输入源(表):`page_view`和`user`,相应的有两个不同的 Mapper 处理不同来源的数据。不过这两个 Mapper 的输入和输出的 key-value 类型都相同。

输入


LongWritable -> Text

Key

Mapper 输入 key 类型为:`LongWritable`,代表着数据文件的偏移量;

Value

Mapper 输入 value 类型是:`Text`,包含各自文件/表中的一行记录。


输出


Text -> TextPair

Key

为了让特定用户的 page 相关数据和用户信息将被 shuffle 到相同的 Reducer,我们使用`userid`作为 key,因此 key 的类型为`Text`。


Value

对于`user`表,Mapper 需要输出`age`;对于`page_view`表,Mapper 需要输出`pageid`。


但是 Value 中仅仅包含原始数据是不够的,因为在 Reduce 过程中我们无法区分数据到底是 age 还是 pageid,因此我们还需要在 Value 中增加一个 tag,不同的 tag 代表不同的数据源,这样处理时,我们根据 tag 就可以知道当前的 value 的含义。因此,Value 的类型是一个二元组:`TextPair`。其中,第一个成员表示数据源 tag,第二个成员则是相应的原始数据。


Reducer 输入


Text -> TextPair

Key

和 Mapper 的输出 key 类型相同:`Text`,代表特定用户的 id。

Value

经过排序和 group 后得到的某个用户的所有数据,包括该用户的 age 信息和浏览页面信息。

Reducer 输出

Text -> TextPair

Key

和 Mapper 的输出 key 类型相同:`Text`,代表特定用户的 id。

Value

经过处理后得到的`pageid`和 `age`。

用户头像

zamkai

关注

还未添加个人签名 2018.02.24 加入

还未添加个人简介

评论

发布
暂无评论
架构师训练营第十二周作业