大数据技术学习——YARN
【摘要】 Yarn是主从结构的资源管理调度框架。
1 一句话介绍
Yarn是主从结构的资源管理调度框架。
2 Yarn架构
Yarn架构是一个典型的主从架构。ResourceManager统一调配,NodeManager作为每个节点的代理负责执行。
- Container:容器是一个包含CPU、内存、磁盘以及网络IO等硬件资源的动态资源分配单位,一个DataNode上的这些硬件资源可以根据规划的容器参数切分成多个容器。
- ResourceManager(RM):与NameNode部署在一起,包含Scheduler和ApplicationsManager两个核心组件。
- Scheduler:调度器根据容量以及队列限制条件,应用的具体需求,为应用分配容器,但不调度任务。调度器是一个可拔插应用,用于可自行设计调度器。
- ApplicationsManager:应用程序管理器负责与调度器协商启动第一个运行ApplicationMaster(AM)的容器;接受来自AM的资源申请与释放请求并转给Scheduler,监控AM的状态,并在失败时重启。
- NodeManager(NM):节点上资源与任务管理器。向RM上报资源使用情况与容器状态,接收来自AM的任务启停请求。
3 Yarn任务调度流程
- 客户端向ApplicationsManager提交应用(包括AM程序、启动AM命令及用户程序)
- ApplicationsManager为AM分配第一个容器,并通知NM启动AM应用。
- AM向ApplicationsManager注册,以便ApplicationsManager能监控应用。
- AM从Scheduler领取容器资源(可分布到不同DN上)。
- AM将容器资源进行二次分配给各个具体的任务,并通知各NM启动任务。
- NM准备好运行环境后,将任务启动命令写入脚本并执行。
- 分布在个DN上的任务通过RPC协议向AM汇报进展。
- 任务执行完后,AM向ApplicationsManager发起注销请求。
4 资源分配模型
- 集群资源由队列组织起来。队列是集群一部分资源的集合,占用集群百分比资源。父队列可以有多个子队列,且应用只运行在叶子队列上。
- 影子队列不对外呈现,以xx-default为名字,目的是为了使同级的队列容量之和不够一百时,将剩余容量值赋予此队列。(容量调度器要求同级队列容量和要为100)
- 重要队列参数:
- capacity:队列占用整个集群资源的比例。
- maximum-capacity:由于存在资源共享,因此一个队列使用的资源可超过其容量,而最多使用资源量可通过该参数限制,若该参数设置为100%,理论上可使用整个集群的资源。但原本空闲的队列添加新任务时,就需要夺回被占据的资源(前提是被占据的资源中运行的任务结束后才能被夺回)。
- minimum-user-limit-percent:每个用户使用资源的下限百分比。
- user-limit-factor:每个用户使用的资源上限百分比。默认10,表示获取的资源不能超过capacity的10倍,当然更不能超过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作为统一资源管理调度器,由状态机维护Application、Container以及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_SAVING的RMAppImpl遇到 FAILED事件后转换为FAILED状态。
- KILLING:客户端执行KILL操作后会转换为FINAL_SAVING状态,另外会设置RMAppImpl的targetedFinalState为KILL。
- KILLED:处于FINAL_SAVING的RMAppImpl遇到APP_UPDATE_SAVED事件后RMAppImpl转换为KILLED状态。
7 参考
- https://data-flair.training/blogs/hadoop-yarn-node-manager-tutorial/
- https://blog.csdn.net/u012151684/article/details/108198896
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)