yarn工作机制及其他知识点整理

文章目录

  • 前言
  • 一、Yarn基础架构
  • 二、Yarn工作机制
    • 容量调度器(Capacity Scheduler)
    • 公平调度器(Fair Scheduler)
  • 三、Yarn生产环境核心参数


前言

Yarn是一个资源调度平台,负责为运算程序提供服务器运算资源,相当于一个分布式的操作系统平台,而MapReduce等运算程序则相当于运行于操作系统之上的应用程序。


一、Yarn基础架构

在这里插入图片描述

YARN主要由ResourceManager、NodeManager、ApplicationMaster和Container等组件构成。

  1. ResourceManager(RM)
    • 处理客户端请求
    • 监控NodeManager
    • 启动监控ApplicationMaster
    • 资源的分配与调度
  2. NodeManager(NM)主要作用
    • 管理单个节点上的资源
    • 处理来自ResourceManager的命令
    • 处理来自ApplicationMaster的命令
  3. ApplicationMaster(AM)作用
    • 为应用程序申请资源并分配给内部任务
    • 任务的监控与容错
  4. container容器
    • container是YARN中的资源抽象,它封装了某个节点上的多维度资源,如内存、CPU、磁盘、网络等

二、Yarn工作机制

在这里插入图片描述
(1) MR程序提交到客户端所在节点,通过main方法执行了waitForCompletion方法后创建YarnRunner,YarnRunner向RM申请一个application资源
(2) RM返回给application资源的提交路径以及application_id
(3) YarnRunner提交job运行所需资源,包括该job所需切片的信息(job.split)、job在Hadoop集群中的参数配置信息(job.xml)和使用的jar包(wc.jar);这些资源文件需在job.submit()方法提交成功后才会在.staging文件中生成(当然里面还包含crc校验文件的sucess标志文件)
(4) 资源提交完成后YarnRunner向RM申请运行mrAppMaster
(5) RM会在内部将用户的请求初始化一个Task,然后放入的任务队列里面等待执行
(6) 等到NodeManager空闲后领取到Task任务便创建container容器
(7) container容器在里面启动mrAppMaster
(8) container容器读取job资源,获取到了job切片信息,向RM申请MapTask容器用来执行Map任务
(9) 其他空闲NodeManager空闲后领取任务创建对应切片个数的container容器
(10)之后mrAppMaster发送程序脚本启动对应的Map任务,yarnChild即为Map任务进程
(11)当Map任务运行完成落磁盘之后,mrAppMaster会再次向RM申请执行ReduceTask任务的资源
(12)reduce向map获取分区的数据
(13)当reduce任务也运行完成之后,mrAppMaster通知RM并注销自己,同时相关的MapReduce的资源也释放掉

容量调度器(Capacity Scheduler)

目前,Hadoop作业调度器主要有三种:FIFO、容量(Capacity Scheduler)和公平(Fair Scheduler)。
Apache Hadoop3.1.3默认的资源调度器是Capacity Scheduler。
CDH框架默认调度器是Fair Scheduler。
具体设置详见:yarn-default.xml文件

<property><description>The class to use as the resource scheduler.description><name>yarn.resourcemanager.scheduler.classname>
<value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacitySchedulervalue>
property>

在这里插入图片描述
特点:

  • 多队列:每个队列可配置一定的资源量,每个队列采用FIFO调度策略
  • 容量保证:管理员可为每个队列设置资源最低保证和资源使用上限
  • 灵活性:如果一个队列中的资源有剩余,可以暂时共享给那些需要资源的队列,而一旦该队列有新的应用程序提交,则其他队列借调的资源会归还给该队列。
  • 多租户:
    支持多用户共享集群和多应用程序同时运行。
    为了防止同一个用户的作业独占队列中的资源,该调度器会对同一用户提交的作业所占资源量进行限定。

公平调度器(Fair Scheduler)

在这里插入图片描述

  1. 与容量调度器相同点
    (1)多队列:支持多队列多作业
    (2)容量保证:管理员可为每个队列设置资源最低保证和资源使用上线
    (3)灵活性:如果一个队列中的资源有剩余,可以暂时共享给那些需要资源的队列,而一旦该队列有新的应用程序提交,则其他队列借调的资源会归还给该队列。
    (4)多租户:支持多用户共享集群和多应用程序同时运行;为了防止同一个用户的作业独占队列中的资源,该调度器会对同一用户提交的作业所占资源量进行限定。
  2. 与容量调度器不同点
    • 核心调度策略不同
      容量调度器:优先选择资源利用率低的队列
      公平调度器:优先选择对资源的缺额比例大的
    • 每个队列可以单独设置资源分配方式
      容量调度器:FIFO、 DRF
      公平调度器:FIFO、FAIR、DRF

三、Yarn生产环境核心参数

  1. ResourceManager相关

    yarn.resourcemanager.scheduler.class	            配置调度器,默认容量
    yarn.resourcemanager.scheduler.client.thread-count     ResourceManager处理调度器请求的线程数量,默认50
    
  2. NodeManager相关

    yarn.nodemanager.resource.detect-hardware-capabilities     是否让yarn自己检测硬件进行配置,默认false
    yarn.nodemanager.resource.count-logical-processors-as-cores     是否将虚拟核数当作CPU核数,默认false
    yarn.nodemanager.resource.pcores-vcores-multiplier	        虚拟核数和物理核数乘数,例如:48线程,该参数就应设为2,默认1.0
    yarn.nodemanager.resource.memory-mb	            NodeManager使用内存,默认8G
    yarn.nodemanager.resource.system-reserved-memory-mb  NodeManager为系统保留多少内存
    以上二个参数配置一个即可
    yarn.nodemanager.resource.cpu-vcores          NodeManager使用CPU核数,默认8个
    yarn.nodemanager.pmem-check-enabled        是否开启物理内存检查限制container,默认打开
    yarn.nodemanager.vmem-check-enabled        是否开启虚拟内存检查限制container,默认打开
    yarn.nodemanager.vmem-pmem-ratio            虚拟内存物理内存比例,默认2.1
    
  3. Container相关

    yarn.scheduler.minimum-allocation-mb	容器最最小内存,默认1G
    yarn.scheduler.maximum-allocation-mb	容器最最大内存,默认8G
    yarn.scheduler.minimum-allocation-vcores	容器最小CPU核数,默认1个
    yarn.scheduler.maximum-allocation-vcores	容器最大CPU核数,默认4个
    


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部