04Hadoop的Yarn
作用
任务的调度和资源的管理
主从架构
主节点:ResourceManager
作用:负责接收客户端任务的请求和资源的管理,MapReduce程序在运行任何一个任务的时候都需要资源,在运行MapReduce任务的时候需要CPU、内存等资源都会跟ResourceManager申请,当MapReduce程序要运行一个任务时会向ResourceManager发送运行任务的请求,ResourceManager会给分配一个任务管理器对任务进行管理和执行,在任务管理器管理执行的过程中需要资源了任务管理器会向ResourceManager申请资源;
从节点:NodeManager
作用:负责任务的运行以及运行过程的监控,监控任务运行是否成功等,MapReduce只是一个计算模型,MapReduce运行时会启动一个任务进程,这个任务是运行在NodeManager节点上的,NodeManager监控这个任务是不是运行成功(包括有没有启动成功,运行中是否出错等等)
MapReduce程序在yarn上执行的流程图
![MapReduce程序在yarn上执行的流程图](./yarn运行流程.png)
MapReduce程序在yarn上运行的流程
1.一般我们会将业务代码封装到MapReduce程序中,然后将MapReduce程序打成jar包,打包成jar包后客户端会向resourceManager提交运行job(即jar包)程序的请求,resourceManager中的applicationsManager会接收这个请求; 2. applicationsManager会随机选择一个NodeManager机器并启动该机器上的Application Master的进程作为resourceManager的代理人
1.为什么会有Application Master这个代理人:
由于resourceManager负责处理多个客户端的请求,不能所有的事都让resourcemanager去管理,因此resourcemanager会选择一个代理人去负责这个job的运行及监控而resourcemanager只需要管理Application Master即可(实质上是resourcemanager中的applicationsManager负责管理applications Master);
3. Application Master(代理人)向applicationsManager汇报启动情况(比如Application Master已经启动成功了)并请求分配运行job需要的资源;
4. applicationsManager调度resourceManager中的Resource Scheduler组件,applicationsManager向Resource Scheduler申请Application Master运行job需要的资源,Resource Scheduler将Application Master需要的cpu、内存、磁盘等资源封装成container发送给application Master;
1.Resource Scheduler
作用:负责管理集群中所有机器的CPU、内存、磁盘等资源
2. container
作用:封装了cpu、内存、磁盘等资源
5. application Master向所有的nodemanager发送启动task进程的请求并将task需要的资源告诉nodemanager,nodemanager会从自身机器上去取资源;
6. NodeManager启动task进程(首先运行的maptask然后在运行reducetask)并向maptask任务和reducetask任务传递各自需要的资源;
7. 所有的nodemanager执行完之后会将执行结果返回给Application Master(代理人)
1.Application Master负责整个job的执行,监控所有的task,如果有的nodemanager干死了,Application Master会将当前nodemanager执行的任务发送给其他nodemanager;
8. Application Master将总的结果返回给applicationsManager(由于applicationsManager属于resourcemanager,即Application Master将总的结果返回给resourcemanager),resourcemanager将执行结果返回给客户端。
9. 注意:在NodeManager和ResourceManager之间存在一种通信机制--心跳机制(一般在主从架构中都存在这种机制),这种心跳机制的作用就是NodeManager向ResourceManager汇报当前NodeManager的状态信息,通过这些信息ResourceManager可以判断当前NodeManager是否还存活着。
Yarn服务中组件的功能
Resourcemanager
1.处理客户端请求
2.启动/监控进程(即application Master进程)实质是Resourcemanager中的application Manager监控application Master
3.管理nodemanager
在NodeManager和ResourceManager之间存在一种通信机制--心跳机制(一般在主从架构中都存在这种机制),这种心跳机制的作用就是NodeManager向ResourceManager汇报当前NodeManager的状态信息,通过这些信息ResourceManager可以判断当前NodeManager是否还存活着。
4.资源分配与调度
ApplicationMaster
1.数据切分
启动一个applicationMaster之后首先启动MapReduce程序input的过程将要mapreduce要处理的文件读取进来,数据读取进来后applicationMaster会将数据进行切分,因为有多个map task所以需要将数据进行切分分给不同的map task去执行;
2.为应用申请资源,并分配给内部任务;
3.任务监控与容错
监控对应的job中的map task和reduce task,,applicationManager监控所有的applicationMaster
Resource Scheduler
1.管理集群中所有机器的资源
2.指定applicationMaster管理的每台nodemanager运行task任务所需的资源指标,这个资源指标会封装到Container中发送给applicationMaster,applicationMaster向所有的nodemanager发送运行task任务请求时会将Container发送给每个nodemanager然后nodemanager会将Container发送给每个task任务,task任务会根据此指标从自身所在的机器中获取相应的资源,因为每台nodemanager机器运行多个task任务,nodemanager不可能将自身所有的资源都分配给某个task任务,因此需要Resource Scheduler对集群中所有的资源进行调度管理;
3.Resource Scheduler给applicationMaster分配资源时配置的有一个默认值,此值可以修改
NodeManager
1.单个节点上的资源管理
2.处理来自applicationManager的命令
3.处理来自applicationMaster的命令
Container
对任务运行环境的抽象,封装了cpu、内存等多维资源以及环境变量、启动命令等任务运行相关的信息
历史服务和日志文件
历史服务进程:historyserver
1.作用:
1.用于管理以前运行过的mapreduce程序;
2.在historyserver中可以查看到程序运行过程中所有的配置项以及map task和reduce task相关的信息;
2.配置mapred-site.xml
1.mapreduce.jobhistory.address:内部通信端口程序运行后需要jobhistory管理所以需要其内部能过进行通信; 主机名:10020
2.mapreduce.jobhistory.webapp.address:web端访问的端口
主机名:19888
3.重启集群服务
4.启动jobhistory服务:
sbin/mr-jobhistory-daemon.sh start historyserver