YARN
YARN(Yet Another Resource Negotiator)是Hadoop的集群资源管理系统。
分布式计算框架(MapReduce,Spark)作为YARN应用运行在集群计算层(YARN)和集群存储层(HDFS和Hbase)之上。而Pig,Hive等都是运行在MapReduce,Spark之上的处理框架,它们不和YARN直接打交道。
HDFS,HBase -> YARN -> MapReduce,Spark ->Hive,Pig
YARN结构解析
ResourceManager
- 处理客户端请求
- 启动/监控ApplicationMaster
- 监控NodeManager
- 资源分配与调度
NodeManager
- 单个节点上的资源管理
- 处理ResourceManager的命令
- 处理ApplicationMaster的命令
ApplicationMaster
- 数据切分
- 为应用程序申请资源,并分配给内部任务
- 任务监控与容错
Container
- 对任务运行环境的抽象,封装CPU,内存等资源以及环境变量,启动命令等任务运行相关信息
YARN应用
YARN通过两类长期运行的守护进程提供核心服务:
- 管理集群上资源使用的资源管理器
- 运行在集群中所有节点上且能够启动和监控容器的节点管理器
容器用于执行特定应用程序的进程,每个容器都有资源限制。
YARN中应用到用户运行作业之间的对应关系:
- 一个用户作业对应一个应用,MapReduce
- 作业的每个工作流或每个用户对话对应一个应用,Spark
- 多个用户共享一个长期运行的应用
YARN中的调度
YARN调度器是根据既定策略为应用分配资源,有三个调度器:
- FIFO调度器
- 容量调度器
- 公平调度器
FIFO调度器
FIFO调度器将应用放置在一个队列中,然后按照提交的顺序运行应用,先进先出。
容量调度器
在FIFO中容易出现小作业阻塞,即等待大作业完成之后才能运行。
在容量调度器中,设置了一个独立的专门队列保存小作业,一提交就可以启动,需要为小作业预留一定资源,即为队列预留一定的资源。
即其有多个队列,每一个队列预留一定的资源,每个队列采用FIFO调度。
在capacity-scheduler.xml文件中配置各个队列大小。
公平调度器
不需要预留资源,调度器会在所有运行的作业之间动态平衡资源。
第一个大作业启动,它是唯一运行的作业,则会获得集群所有的资源。当第二个小作业启动,它被分配到集群的一半资源,但是它需要等待第一个作业将这一半资源释放。等第二个作业完成之后,大作业将会再次得到全部的资源。
在fair-scheduler.xml中哦诶之各个队列大小(分配权重),用于公平共享计算。
抢占:允许调度器终止那些占用资源超过其公平共享份额的队列的容器,资源释放后可以分配给资源数量低于应得份额的队列。抢占功能有两个抢占超时设置:
- 最小共享
在指定时间内未获得被承若的最小共享资源,调度器会抢占其他容器。 - 公平共享
在指定时间呃逆获得的资源仍然低于其公平共享份额的一半,调度器会抢占其他容器。