MapReduce 函数分析
分析如下 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 表结构与数据示例如下:
通过观察看出 2 张表是通过 userid 进行关联的,所以 map 的输出是以 userid 为 key。
Page_view 表:
Map 函数输入:
map(key:offset, value:line_ of_page_view)
l key 是 value 所在行的偏移量。
l value 是 page_view 表中一行的文本内容。
Map 函数输出:
l Key:userid 值。
l Value:是键值对,键是表编号,值是 pageid。
Key:111 value:{1:1}
Key:111 value:{1:2}
Key:222 value: {1:1}
User 表输入:
Map 函数输入:
map(key:offset, value:line_of_user)
l key 是 value 所在行的偏移量。
l value 是 user 表中一行的文本内容。
Map 函数输出:
l Key:userid 值。
l Value:是键值对,键是表编号,值是 age。
Key:111 value: {2:25}
Key:222 value: {2:32}
Shuffle
Shuffle 会将上述 2 个 map 函数输出内容按照 key:userid 排序,输出如下内容交给 Reduce 服务。
{111: {1:1}}
{111: {1:2}}
{111: {2:25}}
{222: {1:1}}
{222: {2:32}
Reduce
Reduce 服务将 shuffle 输出数据作为输入,从 values 过滤出 age 和 pageid 数据。
Key:pageid value:age
1,25
2,25
1,32
版权声明: 本文为 InfoQ 作者【Mars】的原创文章。
原文链接:【http://xie.infoq.cn/article/ba01e17f7e616d803dea55ce4】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论