MapReduce与YARN原理解析
目录
前言
这里主要偏向理论理解,主要是为了更好的理解MR计算框架和YARN
一.MapReduce
(1)mapreduce的发展历程
Hadoop1.x是由hdfs和mapreduce组成,并没有YRAN,资源的调度是由mapreduce的两个组件(JobTracker和TaskTracker)完成。到了Hadoop2.x时mapreduce就把资源管理给分离出来变成现在YARN,YRAN的功能十分强大后续再详细介绍。对于Hadoop2.x后的mapreduce就单纯的是一个分布式计算框架。
(2)mapreduce的工作流程
Split:分片操作
MR最主要就是为了实现分布式并行处理,因此对于一个大规模数据集作业我们需要采取分片操作
split可以自定义大小,一般以一个块大小最合适
- 分片操作就是把数据集拆分成很多小分片,注意这里的切分并不是物理上的,而是逻辑上定义的
RR:记录阅读器
对于map任务它的输入和输出都是k-v形式的,所以就需要通过RR将数据转换为k-v形式。
- RR根据分片的位置和长度信息,从hdfs中将各块把它相关的分片读取处理,读出来以后输出k-v形式
Map:Map函数
map当中就是用户自定义的逻辑处理,根据用户自定义的map函数处理逻辑就可以完成相关的数据处理,处理结束之后就会生成一堆的k-v中间结果
Shuffle
这些中间结果通过shuffle才能发送到Reduce
- 示例
Reduce函数
reduce当中就是用户自定义的逻辑处理,根据用户自定义的reduce函数处理逻辑就可以完成相关的数据处理进行最后的输出
二.YARN
YARN的简介
YARN的体系结构:ResourceManager(RM),ApplicationMaster(AM),NodeManager(NM)
- ResourceManager(RM)是一个全局的资源管理器,负责整个系统的资源管理和分配,处理客户端请求,主要包括两个组件,即调度器(Scheduler)和应用程序管理器(Application Manager)
- ApplicationMaster任务调度与任务监控,为应用作业申请资源并分配给各个任务(Map任务或Reduce任务),实现资源的二次分配,与NM保持通信进行对各个任务的监控,并在任务失败时恢复(即重新申请资源重启任务)
- NodeManager是驻留在一个YARN集群中的每个节点上的代理,监控每个容器的资源使用情况,向RM汇报作业的资源使用情况和每个容器的运行状态,接收来自ApplicationMaster的各种请求。
调度器接收来自ApplicationMaster的应用程序资源请求,把集群中的资源以“容器”的形式分配给提出申请的应用程序,容器的选择通常会考虑应用程序所要处理的数据位置,进行就近选择从而实现“计算向数据靠拢”
容器:容器(Container)作为动态资源分配单位,每个容器中都封装了一定数量的CPU、内存、磁盘等资源,从而限定每个应用程序可以使用的资源量
调度器:调度器被设计成是一个可插拔的组件,YARN不仅自身提供了许多种直接可用的调度器,也允许用户根据自己的需求重新设计调度器
应用程序管理器:负责系统中所有应用程序的管理工作,主要包括应用程序提交、与调度器协商资源以启动ApplicationMaster、监控ApplicationMaster运行状态并在失败时重新启动等
YARN工作流程
-
首先用户编写应用程序向YARN提交,提交内容包括:
ApplicationMaser程序
启动ApplicationMaster命令(这就是会根据计算框架而变)
用户程序 -
RM负责接受和处理来自客户端的请求,为应用程序分配一个容器隔离,并在该容器中启动一个ApplicationMaster,由ApplicationMaster总管整个作业的调度与执行
-
ApplicationMaster被创建后会首先向RM注册,因为只有注册了RM才会实时监控管理ApplicationMaster
-
ApplicationMaster采用了轮询的方式向RM申请资源
一个应用程序执行就会关联一个ApplicationMaster管家,它会统一管理整个程序作业的资源调度执行。作业要执行就会被分成多个任务(如多个Map或Reduce任务),每个任务都需要相关的容器资源,都需要申请一个容器去执行任务,ApplicationMaster这时就需要向RM申请这些资源 -
RM以容器的形式向AM分配资源
-
AM获得到容器以后,就会把它申请到的资源进行二次分配,把它分配到自己所管理的任务
-
这时每个在容器运行的任务都要通过NM将当前的工作状态与进度向AM汇报,如果任务失败AM会重新申请让他恢复
-
整个应用程序(作业)运行完成后AM会向RM应用程序管理器注销并关闭自己,释放资源
YARN是一个纯粹的资源调度管理框架,只要编程实现相应的AM就可以运行不同的框架
总结
以上就是我今天的所学内容,主要还是偏向理论