写点什么

架构师训练营 12 周作业

用户头像
叶鹏
关注
发布于: 2020 年 09 月 22 日

MapReduce分布式计算引擎的编程模型分为两部分,即mapreduce。理解其运行机制的核心关键点是理解map和reduce这两个方法的输入和输出分别是什么?理解这一点,我们就理解了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 表结构与数据示例如下:



分析过程:

1、要素包括:

  • 两张表:page_view、user

  • 查询字段:page_view.pageid、user.age

  • 表关联字段:userid



2、map的输入:

两个数据表的一行行记录。同时由于涉及多个表,需要对每个表做标识,比如1代表page_view表,2代表user表。



3、map的输出:

由于需要根据userid做表关联,故map的输出格式为:

  • page_view表:<userid>:<tableId,pageid>,

  • user表:<userid>:<tableId,age>.

具体如下:

  • <111>:<1,1>

  • <111>:<1,2>

  • <222>:<1,1>

  • <111>:<2,25>

  • <222>:<2,32>



4、reduce的输入:

map的输入会经过一个shuffle sort过程,同一个key的value整合成一个列表,输入到reduce方法,如下:

  • <111>:[<1,1>,<1,2>,<2,25>]

  • <222>:[<1,1>,<2,32>]



5、reduce的输出:

针对每个key整合value列表,通过两层循环(先循环取表1的每条记录,循环跟表2的每条记录组合),将表1和表2的value组合成最终的结果如下:

<1,25>、<2,25>、<1,32>。



下面用一张图表示全部过程:





发布于: 2020 年 09 月 02 日阅读数: 13

版权声明: 本文为 InfoQ 作者【林昱榕】的原创文章。

原文链接:【https://xie.infoq.cn/article/1ccb1ae1b04225c0ac85af1fe】。

本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。



用户头像

叶鹏

关注

还未添加个人签名 2018.09.25 加入

还未添加个人简介

评论

发布
暂无评论
架构师训练营12周作业