大数据技术学习——YARN

举报
slx_share 发表于 2023/02/13 16:10:00 2023/02/13
【摘要】 Yarn是主从结构的资源管理调度框架。

1       一句话介绍

Yarn是主从结构的资源管理调度框架。

2       Yarn架构

Yarn架构是一个典型的主从架构。ResourceManager统一调配,NodeManager作为每个节点的代理负责执行。


  • Container:容器是一个包含CPU、内存、磁盘以及网络IO等硬件资源的动态资源分配单位,一个DataNode上的这些硬件资源可以根据规划的容器参数切分成多个容器。
  • ResourceManager(RM):与NameNode部署在一起,包含SchedulerApplicationsManager两个核心组件。
    • Scheduler:调度器根据容量以及队列限制条件,应用的具体需求,为应用分配容器,但不调度任务。调度器是一个可拔插应用,用于可自行设计调度器。
    • ApplicationsManager:应用程序管理器负责与调度器协商启动第一个运行ApplicationMaster(AM)的容器;接受来自AM的资源申请与释放请求并转给Scheduler,监控AM的状态,并在失败时重启。
  • NodeManager(NM):节点上资源与任务管理器。向RM上报资源使用情况与容器状态,接收来自AM任务启停请求。

3       Yarn任务调度流程


  • 客户端向ApplicationsManager提交应用(包括AM程序、启动AM命令及用户程序)
  • ApplicationsManagerAM分配第一个容器,并通知NM启动AM应用。
  • AMApplicationsManager注册,以便ApplicationsManager能监控应用。
  • AMScheduler领取容器资源(可分布到不同DN上)。
  • AM将容器资源进行二次分配给各个具体的任务,并通知各NM启动任务。
  • NM准备好运行环境后,将任务启动命令写入脚本并执行。
  • 分布在个DN上的任务通过RPC协议向AM汇报进展。
  • 任务执行完后,AMApplicationsManager发起注销请求。

4       资源分配模型


  • 集群资源由队列组织起来。队列是集群一部分资源的集合,占用集群百分比资源。父队列可以有多个子队列,且应用只运行在叶子队列上。
  • 影子队列不对外呈现,以xx-default为名字,目的是为了使同级的队列容量之和不够一百时,将剩余容量值赋予此队列。(容量调度器要求同级队列容量和要为100
  • 重要队列参数:
    • capacity:队列占用整个集群资源的比例。
    • maximum-capacity:由于存在资源共享,因此一个队列使用的资源可超过其容量,而最多使用资源量可通过该参数限制,若该参数设置为100%,理论上可使用整个集群的资源。但原本空闲的队列添加新任务时,就需要夺回被占据的资源(前提是被占据的资源中运行的任务结束后才能被夺回)
    • minimum-user-limit-percent:每个用户使用资源的下限百分比。
    • user-limit-factor:每个用户使用的资源上限百分比。默认10,表示获取的资源不能超过capacity10倍,当然更不能超过maximum-capacity
    • maximum-am-resource-percent:队列中每个应用使用资源的上限百分比。
    • maximum-applications:队列中最大应用数。
  • 提交应用时会选择一个队列(如没有则使用默认的队列default)。
  • 调度器为队列上的应用分配资源,不超过队列总资源。
  • 调度器会优先匹配本地资源的申请请求,其次是同机架的,最后是任意机器的。

5       Yarn原生界面参数理解

  • scheduler.maximum-allocation-vcores:每个Container最大可使用的vcore数量。
  • scheduler.minimum-allocation-vcores:每个Container最小可使用的vcore数量。
  • scheduler.maximum-allocation-mb:每个Container最大可使用的内存。
  • scheduler.minimum-allocation-mb:每个Container最小可使用的内存。
  • map.cpu.vcores:调度器为每个map task申请的vcore数量。mapreduce on yarn每个map task对一个Container
  • reduce.cpu.vcores:调度器为每个reduce task申请的vcore数量。

6       Yarn状态机

RM作为统一资源管理调度器,由状态机维护ApplicationContainer以及Node三类对象的状态以及根据触发事件变更对象的状态。每个对象都有相应的状态机与之对应。

6.1       四类状态机

  • RMApp:状态机RMAppImpl(实现类)维护应用的状态,与RMAppAttemptImpl一对多的关系。
  • RMAppAttempt:应用可能会尝试多次运行,每次尝试运行的状态由状态机RMAppAttemptImpl维护。
  • RMContainer:状态机RMContainerImpl维护存活容器的状态。
  • RMNode:状态机RMNodeImpl维护NodeManager的状态。

6.2       应用状态

  • NEW:状态机初始化中。
  • NEW_SAVING:表示RM在处理客户端提交作业的请求期间。
  • SUBMITTED:表示应用已经提交成功。
  • ACCEPTED:表示应用已经提交给调度器。
  • RUNNING:表示AM已向RM注册成功,任务运行中。
  • FINAL_SAVING:表示正在保存RMAppImpl到存储器。
  • FINISHING:表示RM上相应的应用状态已经完成存储工作。
  • FINISHED:状态机RMAppImpl正常结束状态。
  • FAILED:处于FINAL_SAVINGRMAppImpl遇到 FAILED事件后转换为FAILED状态。
  • KILLING:客户端执行KILL操作后会转换为FINAL_SAVING状态,另外会设置RMAppImpltargetedFinalStateKILL
  • KILLED:处于FINAL_SAVINGRMAppImpl遇到APP_UPDATE_SAVED事件后RMAppImpl转换为KILLED状态。

7       参考

 

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。