Yarn~学习日记

Hadoop~Yarn

一、 yarn概述

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

Hadoop集群中Yarn跟HDFS没有直接的关系。

二、 Yarn的基础架构

Yarn由ResourceManager、NodeManager、ApplicationMaster、Container等组件构成。

  1. ResourceManager是Yarn中的重要部分,负责处理客户端请求、监控集群、资源调度分配等任务,是Yarn中的老大哥
  2. NodeManager负责管理单个节点上的资源,处理来自RS和AM的命令。
  3. ApplicationMaster负责向RS申请资源,并且监控任务、提高容错。
  4. Container是一个容器,用来存放任务需要的各种资源(CPU、内存、网络带宽等)。

三、 Yarn的工作机制

1. yarn运行机制

yarn工作之前,需要从Client将要执行的MR程序提交到所在的NodeManager节点上。提交程序之后的工作流程如下:

  1. Client会向ResourceManager申请一个Application,RM会将Application的资源路径、HDFS的相关信息、application_id返回给Client。
  2. Client获得相关信息之后,会提交当前Job需要的运行资源。并且产生Job.split、Job.xml、jar包
  3. 以上步骤落地之后,Job所需的资源才算提交完毕,并且申请运行MRAppMaster
  4. 运行开始,RM中会初始化一个Task任务,这个Task就是当前Job的AppMaster,AppMaster会将当前Job提交到一个队列,等待NodeManger领取任务。
  5. NM领取任务之后,会立刻创建一个Container容器,用来存放Job的运行资源(硬件资源+AppMaster)
  6. AppMaster会从HDFS将要计算的资源下载到NM本地,并通过切片信息向RM申请若干MapTask
  7. 资源申请完毕之后,AM会向MT发送启动程序脚本,MT开始并发执行。
  8. MT执行完毕后,AM会根据MT阶段的结果文件数量,向RM申请RT的运行资源,并将MT的资源回收。
  9. 当RT运行结束之后,AM会跟RM通信,并注销自己,释放资源。

yarn只有在接收到任务之后,才会跟HDFS有交集,操作数据进行运算。

2. yarn的作业提交机制

yarn的作业提交机制与运行机制的步骤大致相同,Client通过调用job.waitForCompletion方法,向整个集群提交MR作业。

作业执行时,yarn会将任务的进度和状态返回给应用管理器,Client每秒(可自行更改配置参数)向应用管理器请求更新进度,并展示给用户。

除了更新进度之外,Client每5秒都会调用waitForCompletion()方法检查作业是否完成,作业完成后,作业信息会被保存到历史服务器以备核查。

四、 yarn的调度算法

yarn有3种资源调度算法:FIFO容量调度器(Capacity Scheduler)、公平调度器(Fair Scheduler)

1. FIFO

FIFO是一种单队列资源调度算法,遵循先进先出的规则,简单易懂。但是,由于FIFO不支持多队列,容易造成任务堵塞、灵活性很差,真实环境中很少使用此方案。

2. 容量调度器

容量调度器是yarn中默认的资源调度器。是Yahoo开发的多用户资源调度器。

1. 容量调度器的特点

  1. 支持多队列:容量调度器底层使用多个队列,每个队列采用FIFO调度策略,并且可以为每个队列配置一定的资源。
  2. 容量有保证:管理员可以为每个队列设置最低资源保障最大资源限制
  3. 灵活性高:因为上述特点,如果队列中的资源有空闲,空闲资源会被借给其他资源不足的队列。当借出资源的队列需要资源时,其他借调资源的队列会将资源返还
  4. 多租户:容量调度器可以支持多个用户共享集群资源,并切支持多用户的程序同时运行。为了防止用户之间抢占资源,可以为每个用户设置资源限制。

2. 容量调度器的资源分配算法

1. 队列资源分配

使用深度优先算法优先给资源占用率低的资源队列分配资源。

2. 作业资源分配

按照Job提交的先后顺序和Job的优先级分配资源。

3.容器资源分配
  • 按照容器(container)的优先级分配资源
  • 如果容器的优先级相同,则按照本地优先原则,顺序依次如下:
    • 任务和数据在同一节点
    • 任务和数据在同一机架
    • 任务和数据在同一集群

3. 公平调度器

Fair Schedulere是Facebook开发的多用户调度器。

1. 公平调度器的特点

公平调度器具备容量调度其的特点:

  • 多队列
  • 队列资源有保障
  • 灵活性高
  • 多租户

并且,公平调度器还有其他特点:

  1. 核心资源的调度策略不同:

    • 容量调度器优先分配给占用率低的队列
    • 公平调度器优先分配给任务缺额大的队列
  2. 每个队列单独分配资源的方式不同

    • 容量调度器:FIFO、DRF
    • 公平调度器:FIFO、DRF、FAIR

    如果公平调度器选择FIFO的资源分配方式,那么就等于是容量调度器

    什么是缺额:

    公平调度器在时间尺度上,为每一个队列分配的资源都是相同的。某一时刻上的Job的应获得的资源和实际获得的资源的差叫做缺额。

2. 公平调度器的资源分配方法

1. 队列资源分配

每个队列对集群的资源需求不同,首先将集群资源平均分配给所有队列,多分配资源的队列会将多余的资源让出。之后进行下一次计算,将多出的资源再次平均分配给资源不足的队列,以此类推,直到资源完全分配给每个队列。

2. 作业资源分配

公平调度器的作业资源分配分为两种情况:加权、不加劝。

  1. 不加权分配:类似队列资源分配的方式,先将资源平均分配给每一个Job,之后将出让的多余资源经过计算再次平均分配给资源不足的Job,以此类推,直到没有空闲资源为止。
  2. 加权分配:分配方式与不加劝的类似,但是在计算时对Job进行加权计算。
3. DRF策略

按照不同应用所需的不同资源类型,按需分配。

yarn默认只考虑内存资源

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


学习编程是顺着互联网的发展潮流,是一件好事。新手如何学习编程?其实不难,不过在学习编程之前你得先了解你的目的是什么?这个很重要,因为目的决定你的发展方向、决定你的发展速度。
IT行业是什么工作做什么?IT行业的工作有:产品策划类、页面设计类、前端与移动、开发与测试、营销推广类、数据运营类、运营维护类、游戏相关类等,根据不同的分类下面有细分了不同的岗位。
女生学Java好就业吗?女生适合学Java编程吗?目前有不少女生学习Java开发,但要结合自身的情况,先了解自己适不适合去学习Java,不要盲目的选择不适合自己的Java培训班进行学习。只要肯下功夫钻研,多看、多想、多练
Can’t connect to local MySQL server through socket \'/var/lib/mysql/mysql.sock问题 1.进入mysql路径
oracle基本命令 一、登录操作 1.管理员登录 # 管理员登录 sqlplus / as sysdba 2.普通用户登录
一、背景 因为项目中需要通北京网络,所以需要连vpn,但是服务器有时候会断掉,所以写个shell脚本每五分钟去判断是否连接,于是就有下面的shell脚本。
BETWEEN 操作符选取介于两个值之间的数据范围内的值。这些值可以是数值、文本或者日期。
假如你已经使用过苹果开发者中心上架app,你肯定知道在苹果开发者中心的web界面,无法直接提交ipa文件,而是需要使用第三方工具,将ipa文件上传到构建版本,开...
下面的 SQL 语句指定了两个别名,一个是 name 列的别名,一个是 country 列的别名。**提示:**如果列名称包含空格,要求使用双引号或方括号:
在使用H5混合开发的app打包后,需要将ipa文件上传到appstore进行发布,就需要去苹果开发者中心进行发布。​
+----+--------------+---------------------------+-------+---------+
数组的声明并不是声明一个个单独的变量,比如 number0、number1、...、number99,而是声明一个数组变量,比如 numbers,然后使用 nu...
第一步:到appuploader官网下载辅助工具和iCloud驱动,使用前面创建的AppID登录。
如需删除表中的列,请使用下面的语法(请注意,某些数据库系统不允许这种在数据库表中删除列的方式):
前不久在制作win11pe,制作了一版,1.26GB,太大了,不满意,想再裁剪下,发现这次dism mount正常,commit或discard巨慢,以前都很快...
赛门铁克各个版本概览:https://knowledge.broadcom.com/external/article?legacyId=tech163829
实测Python 3.6.6用pip 21.3.1,再高就报错了,Python 3.10.7用pip 22.3.1是可以的
Broadcom Corporation (博通公司,股票代号AVGO)是全球领先的有线和无线通信半导体公司。其产品实现向家庭、 办公室和移动环境以及在这些环境...
发现个问题,server2016上安装了c4d这些版本,低版本的正常显示窗格,但红色圈出的高版本c4d打开后不显示窗格,
TAT:https://cloud.tencent.com/document/product/1340