架构视角剖析MapReduce流程【附调优指南】(推荐收藏)
Tips: 文末戳阅读原文,直达面试专题系列
本文之前,先来回顾一下本系列来自不同大厂的四位大佬的面经:
▼ 阿里 | 记一次蚂蚁金服面试经历▼ 头条 | 大厂大数据开发面试经验▼ 快手 | 记一次数据岗位大厂面试▼ 校招 | 一个BAT校招面试官的1天
今天分享的是数据仓库/大数据开发面试必问知识点:MapReduce全流程及性能调优。
导读:对于面试,不管是BAT、ATM,还是创业公司、外包,面试都讲究的是天时地利人和,但技术过硬依然是必须的充要条件。本文从不同level的工程师对于MR的理解与流程、优化展开介绍,建议收藏。看一下现在的你属于哪个level?
正文
MapReduce是分布式计算的鼻祖,虽然我们已经不需要再写MR了,但是了解MR的底层逻辑,对解决各种分布式遇到的问题、调优,有极大的帮助。废话不多说,OK,let's GO!
MapReduce流程分为4个步骤:
input:从hdfs中读取文件,数据读取组件是TextInputFormat和LineRecordReader。
mapper:根据input步骤读取过来的数据,进行数据映射。之后进行混洗,混洗主要进行分区、排序和合并。
reduce:混洗好的数据交给Reduce步骤进行计算。
output:Reduce计算好的数据经过TextOutputFormat和LineRecordQriter组件,输出到对应OutPutPath中。
MapReduce流程分为7个步骤:
数据读取:从hdfs中读取文件,数据读取组件是TextInputFormat和LineRecordReader。
数据分片:调用Job.steInputFormaiClass()定义的InputFormat,将数据切分成小的Split。
Mapper:每一个Split生成一个MapTask,对每个分片中的数据进行排序,并进行部分合并,刷写到磁盘中。
Shuffle:将每个MapTask中处理好的数据,重新排序后,进行分区,copy到Reduce的缓存中。其中可以配置数据压缩、reduce节点数等参数。
Reduce:将缓存中的数据进行进一步的排序和merge,形成一份文件,交给Reduce函数进行顺序计算。
计算好的数据经过TextOutputFormat和LineRecordQriter组件,进行输出。
最后根据OutPutPath输出每个文件到对应的HDFS中。
MapReduce一共有7个角色参与,分为4个大阶段,7个小阶段。分别是:
1、任务启动阶段
1.1、由Client端发起请求;
1.2、YarnRunner接受请求并申请资源;
1.3、ResourceManager检索资源情况,分配资源路径给YarnRunner;
1.4、YarnRunner进行分片,申请启动MRAppMaster
1.5、ResourceManager根据分片和job等信息,选择数据所在节点启动MapTask(程序找数据),唤醒MRAppMaster
1.6、MRAppMaster启动,持续监控和管理任务
1.7、MapTask启动,开始干活
2、Map阶段
2.1数据读取,每个task读取自己节点上的数据。
2.2数据处理
2.2.1每个task对自己读取到的数据进行split,分成更小的数据块
2.2.2对每个split的数据进行map,提取key、value、con
2.2.3对数据进行分区,有条件建议自定义分区,可以解决数据倾斜的问题,对之后的reduce也有极大的优化
2.2.4数据进入环形缓冲区,以起始点为赤道,到达溢出比后,刷新赤道
2.2.5溢出的数据刷入sort进行排序
2.2.6排序好的数据放入spill,进行merge后有序写入hdfs
2.3shuffle阶段:广义shuffle阶段从map之后就开始,到调用reduce函数结束。这里只是将hdfs的数据刷入reduce的缓存区域。
3、reduce阶段:
3.1Reduce启动
3.1.1MRAppMaster监控到redeuce任务即将结束,开始申请启动ReduceTask;RM接受申请,根据分区结果,启动若干ReduceTask
3.1.2ReduceTask启动,把每个map结果中的不同分区的数据,shuffle数据到对应Reducetask所在节点的缓存
3.2数据处理
3.2.1在缓存中对每个sort进行merge(内存、缓存都有)
3.2.2将merge后的结果,重新进行spill,排序后,落到hdfs
3.2.3将所有小文件merge成一个大文件
3.4、Reduce阶段
3.4.1调用Reduce函数,对排序好的file进行汇总
3.4.2将最终结果写入到hdfs中
4任务结束阶段
4.1MRAppMaster监控到每个Reduce节点的执行情况
4.2向上汇报,并申请注销自己
4.3RM注销MRAppMaster,并向上汇报
4.4YarnRunner返回任务执行完成信息
4.5客户端接受信息,任务结束
MapReduce调优指南
阿里巴巴电商搜索推荐实时数仓演进之路
网易实时数仓架构与实践
SQL查询的底层运行原理分析
一篇文章读懂大数据中台架构
网易大数据用户画像实践
社群推荐:
欢迎加入 大数据数仓中台交流群,跟同行零距离交流。如想进群,请识别下面的二维码,审核通过自主入群。
关于我们:
▼ 福利时刻 ▼
01. 后台回复「06」,即可领取大数据数仓经典书籍。
02. 后台回复「08」,即可领取大厂实时数仓高清ppt。
03. 后台回复「加群」,或添加小助微信ID:iom1128 审核通过拉您入群(大数据|数仓|分析|Flink|资源)或领取资料。
欢迎大家扫描下方二维码订阅「数据仓库与Python大数据」内容并推荐给更多数据方向的朋友,希望有更多机会和大家交流。
Q: 关于数仓BI,你还想了解什么?
欢迎关注置顶公众号
入群请联系小助手:iom1128『紫霞仙子』
!关注不迷路~ 各种福利、资源定期分享