系列文章目录
一、HDFS读写原理【重点】
二、YARN提交mr流程【重点】
三、MapReduce计算流程【重点】
文章目录
- 系列文章目录
- 前言
- 一、HDFS读写原理[面试]
- 1、HDFS数据写入解析
- 2、HDFS数据读取解析
- 二、YARN提交mr流程[面试]
- 1. YARN提交mr过程解析
- 三、MapReduce计算流程[面试]
- 1. MapReduce计算流程解析
前言
本文主要通过图文方式解析了HDFS读写原理,YARN提交mr流程,MapReduce计算流程
一、HDFS读写原理[面试]
1、HDFS数据写入解析
1、客户端向NameNode申请写入数据。
2、NameNode检查客户端是否有写入权限、申请写入的文件是否存在。如果有写入权限且申请写入的文件不存在,则通知客户端可以写入。
3、客户端将文件切割成Block块后,先向NameNode询问第一个Block块的存储位置。
4、NameNode接收到客户端的请求后,根据副本机制、负载均衡机制、机架感知原理及网络拓扑图返回给客户端一个dataNode列表,列表中记录着存储第一个Block块的所有dataNode节点。
5、客户端依据NameNode返回的列表与dataNode建立Pipeline传输管道。
6、客户端再将Block块以Package数据包的形式传递给第一个dataNode节点。如果dataNode节点正确接收到Package数据包,会向客户端返回一个ACK应答,同时将Package包发送给下一个DataNode节点。否则客户端将再次向第一个dataNode节点发送Package数据包。
7、同一次Pipeline管道中dataNode节点依次通过Package包进行数据传送,并通过ACK应答确认数据是否正常接收。
8、重复传输Package数据包的操作直至第一个Block包传输完成。重复传输Block块的操作直至文件传输完成。
2、HDFS数据读取解析
1、客户端向NameNode申请读取数据。
2、NameNode检查客户端是否有读取权限、申请读取的文件是否存在。如果有读取权限且申请读取的文件存在,则根据即将感知原理和网络拓扑图返回客户端存储该文件的所有Block地址(其中包含备份地址)。
3、客户端依据Block地址与dataNode建立传输通道Pipline
5、向dataNode读取文件,如果读取的文件所在的dataNode节点异常宕机了则向备份节点读取。直至文件读取完毕。
二、YARN提交mr流程[面试]
1. YARN提交mr过程解析
1.客户端提交一个MR程序给ResourceManager(校验请求是否合法...)
2.如果请求合法,ResourceManager随机选择一个NodeManager用于生成appmaster(应用程序控制者,每个应用程序都单独有一个appmaster)
3.appmaster会主动向ResourceManager的应用管理器(application manager)注册自己,告知自己的状态信息,并且保持心跳
4.appmaster会根据任务情况计算自己所需要的container资源(cpu,内存...),主动向ResourceManager的资源调度器(resource scheduler)申请并获取这些container资源
5.appmaster获取到container资源后,把对应指令和container分发给其他NodeManager,让NodeManager启动task任务(maptask任务,reducetask任务)
6.NodeManager要和appmaster保持心跳,把自己任务计算进度和状态信息等同步给appmaster,(注意当maptask任务完成后会通知appmaster,appmaster接到消息后会通知reducetask去maptask那儿拉取数据)直到最后任务完成
7.appmaster会主动向ResourceManager注销自己(告知ResourceManager可以把自己的资源进行回收了,回收后自己就销毁了)
三、MapReduce计算流程[面试]
1. MapReduce计算流程解析
MapReduce原理:分为三阶段(map阶段、shuffle阶段、reduce阶段),八步骤(输入、拆分、分区、排序、规约、分组、合并、输出)
核心八步骤详解:
1、封装输入组件、读取源数据:
Map阶段
2、MapTask任务,拆分数据
Shuffle阶段
3、分区:将数据按分区进行标记,以便reduce阶段进行数据合并
4、排序:将数据进行排序,字母按a-z升序,数字按1-9升序
5、规约:用于优化MR程序,提升效率。
6、分组:把相同的数据分配到一组,形成数据组集合
Reduce阶段
7、ReduceTask任务,将数据合并
8、封装输出组件,将结果写到目的文件中