yarn详解
Posted 甜_tian
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了yarn详解相关的知识,希望对你有一定的参考价值。
目录
概念
Apache yarn 是Hadoop的集群资源管理系统。yarn被引入Hadoop2,最初是为了改善MapReduce的实现,但它具有足够的通用性,同样可以支持其他的分布式计算框架。不同的应用系统,如flink,spark,mr都可以用统一的yarn进行资源调配
yarn通过两类长期运行的守护进程提供自己的核心服务:资源管理器(Resource Manager rm)和节点管理器(Node Manager nm)。
类似hdfs,主从模式,由一个 ResourceManager和多个NodeManage 组成。
运行机制
客户端向rm提交应用或任务
每个应用都有一个Application master,需要容器,Application master跟rm申请资源
rm经过scheduler调度器计算,根据每个节点资源情况,进行容器的分配、scheduler在某个nm上启动一个容器,在容器中启动Application master。
application master后续会进行计算,把结果返回给客户端,或向rm申请更多的容器。后者是MapReduce yarn应用的操作。
yarn本身不会为应用的各部分的通信提供任何手段,大多数的yarn应用通过某种形式的远程通信机制,向客户端传递状态更新和返回结果,这些通信机制都是属于各应用本身。
nm每隔一秒,向rm发送心跳,从节点会监控所在节点的资源使用情况。
rm会追踪nm的存活情况。
MapReduce任务资源调度:
客户端利用rpc调用yarnRunner.getNewJobId(),rm检查输出路径,计算分片后,返回给客户端new job id,客户端向hdfs提交数据,mr工程的jar包,配置文件,分片信息等
客户端调用submit方法,与rm通信,把请求发送给application manager,申请运行job
Am把请求转给scheduler调度器。scheduler根据整个集群的计算节点,进行资源分配。
scheduler与nm通信,分配容器,运行mr application master
application master初始化,创建薄记对象,用于保存每个task的执行进度,状态
application master获得数据分片个数,split所在节点,为map task向rm申请资源。
计算结果后,返回给application master,与其他nm进行通信,从hdfs获取配置文件,jar包,map task代码等运行
application master为reduce task申请资源,reduce task就没有数据本地化的要求。
再与相应的nm通信,启动容器,从hdfs拉取资源,通过网络方式从每个节点拉取过来数据,进行reduce合并将结果写入hdfs上
(Scheduler的资源调度遵从,数据本地化,就是移动计算,不移动数据
也就是在split所在节点,创建容器,运行task。若该节点没有可用资源,则会选择机架本地化。在同一机架上的节点创建容器,若该机架也没有可用资源,则随机选择任一节点。)
yarn中的资源调度:
理想情况下,yarn对所有应用发出的资源请求都能立即满足,但是现实中,资源总是有限的,在繁忙的集群上,一些应有经常需要等待,才能得到所需资源。yarn调度器的工作就是根据策略,来为应用分配资源。yarn提供了多种调度器和策略,那么就有以下三种策略:
1. 先进先出 :FIFO (一般企业不用)
fifo把应用放入一个队列中,按照提交的顺序,为应用分配资源。当前应用释放资源后,才能为下一应用分配资源。
FIFO的好处是,简单易懂,不需要要任何配置。但不适用于共享集群,一个大应用会占用集群的所有资源。
2. 容量调度器, Apache默认
容量调度器允许多个组织共享一个Hadoop集群,每个组织按比例分配集群资源。
每个组织配置一个队列,在同一个队列中,使用FIFO调度策略调配。
单个作业的资源不会超过其队列的容量,但是如果队列资源不足,可以设置弹性比例,可以设置上限为75%,容量调度器会将空余的一部分资源分配给队列,多占用一些资源。
通过capacity-scheduler.xml文件,设计容器调度队列的资源分配。
子队列若没有做最大容量限制,可以占据父队列的100%
3. 公平调度器 cdh默认
公平调度器顾名思义,则是为所有应用公平分配资源。
利用权重,分配资源,队列之间是公平共享的
假设有两个用户a和b,a启动一个作业,b若没有需求,则会给a分配到全部可用的资源。但如果这时b启动了一个作业,b则会有一个短时间的延迟,a就会让出一半的资源给b使用。如果b启动了第二个作业,也是会和第一个作业一样,各自共享b的一半资源。a不受影响。
通过fair-scheduler.xml文件,设计公平调度器队列资源分配
以上是关于yarn详解的主要内容,如果未能解决你的问题,请参考以下文章