yarn架构
ResourceManager
组成
Resource Scheduler
Application Manager
功能
处理客户端请求
监控NodeManager
启动和监控ApplicationMaste,进行必要的重启
整个系统的资源分配和调度
NodeManager
本节点上的资源管理和任务管理
功能
定时向ResourceManager汇报本节点上的资源使用情况和各个Container的运行情况
接收和处理来自ResourceManager的Container启动和停止的各种命令
处理来自ApplicationMaster的指令,比如启动MapTask和ReduceTask指令
ApplicationMaster
每个应用程序对应一个ApplicationMaster,负责单个应用程序的管理
功能
为应用程序向ResourceManager申请资源(Container),并分配内部任务(MapTask和ReduceTask)
与NodeManager通信来启动/停止任务,Task都是运行在Container中的
负责任务的监控和容错,当某些Task运行出错,进行容错处理
Container
Container是YARN中的资源抽象,封装了某个节点上的多维度资源,如内存、CPU、磁盘、网络等
Container类似于一个虚拟机,可以在上面执行任务
yarn执行流程
1.作业提交
(1)client调用job.waitForCompletion方法,向整个集群提交MapReduce作业。
(2)client向ResourceManager申请一个作业Id。
(3)ResourceManager给Client返回该job资源的提交路径(HDFS路径)和作业Id,每一个作业都有一个唯一的Id。
(4)Client发送jar包、切片信息和配置文件到指定的资源提交路径。
(5)Client提交完资源后,向ResourceManager申请运行MrAppMaster(针对该job的ApplicationMaster)。
2.作业初始化
(6)当ResourceManager收到Client的请求后,将该job添加到容量调度器(Resouce Scheduler)中。
(7)某一个空闲的NodeManager领取到该job。
(8)该NodeManager创建Container,并产生MrAppMaster。
(9)下载Client提交的资源到本地,根据分片信息生成MapTask和ReduceTask。
3.任务分配
(10)MrAppMaster向ResouceManager申请运行多个MapTask任务资源。
(11)ResourceManager将运行MapTask任务分配给空闲的多个NodeManager,NodeManager分别领取任务并创建容器(Container)。
4.任务运行
(12)MrAppMaster向两个接收到任务的NodeManager发送程序启动脚本,每个接收到任务的NodeManager启动MapTask,MapTask对数据进行处理,并分区排序。
(13)MrAppMaster等待所有MapTask运行完毕后,向ResourceManager申请容器(Container),运行ReduceTask。
(14)程序运行完毕后,MrAppMaster会向ResourceManager申请注销自己。
(15)进度和状态更新
YARN中的任务将其进度和状态(包括counter)返回给应用管理器, 客户端每秒(通过mapreduce.client.progressmonitor.pollinterval设置)向应用管理器请求进度更新, 展示给用户。可以使用YARN WebUI查看任务执行状态。
5.作业完成
除了向应用管理器请求作业进度外, 客户端每5分钟都会通过调用waitForCompletion()来检查作业是否完成。时间间隔可以通过mapreduce.client.completion.pollinterval来设置。作业完成之后, 应用管理器和container会清理工作状态。作业的信息会被作业历史服务器存储以备之后用户核查。
yarn资源调度器
FIFO:先进先出调度器
FIFO 把应用按提交的顺序排成一个队列,这是一个先进先出队列,在进行资源
分配的时候,先给队列中最头上的应用进行分配资源,待最头上的
应用需求满足后再给下一个分配
Capacity Scheduler:容量调度器
支持多个队列,每个队列可配置一定的资源量,每个队列都采用
FIFO 调度策略。支持共享集群,但每个队列在无job时处于资源浪费状态
Fair Scheduler:公平调度器
支持多队列,多用户,每个队列中的资源量可以配置,同一队列中的作业公
平共享队列中所有资源。每当有新job提交时,会享受当前资源的一半。
yarn常用命令
-提交任务
hadoop jar
-查看正在运行的任务
yarn application -list
-杀掉正在运行的任务
yarn application -kill 任务id
-查看节点列表
yarn node -list
-查看节点状态
yarn node -status 节点ID