YARN 设计理念与基本架构
2016-04-26 19:15
495 查看
YARN 的基本组成结构
一. ResourceManager
ResourceManager 是一个全局的资源管理器,负责整个集群的资源管理和分配。它主要由两个组件构成:调度器(Scheduler)和应用程序管理器(Applications Master,ASM)。
①调度器该调度器是一个 "纯调度器",不再参与任何与具体应用程序逻辑相关的工作,而仅根据各个应用程序的资源需求进行分配,资源分配的单位用一个资源抽象概念 "Container" 来表示。Container 封装了内存和 CPU。此外,调度器是一个可插拔的组件,用户可根据自己的需求设计新的调度器,YARN 自身提供了 Fair Scheduler 和 Capacity Scheduler。
②应用程序管理器应用程序管理器负责管理整个系统中所有应用程序,包括应用程序的提交、与调度器协商资源以启动 ApplicationMaster、监控 ApplicationMaster 运行状态并在失败时重新启动它等。
二. ApplicationMaster
用户提交的每个 Application 都要包含一个 ApplicatioNMaster,主要功能包括:
向 RM 调度器申请资源(用 Container 表示)
将从 RM 分配的资源分配给 Applcation 内部的任务
与 NM 通信请求 启动/停止 任务
监控所有任务的运行状态,并在失败时重新为任务申请资源以重启任务
三. NodeManager
NM 是每个节点上的资源和任务管理器,一方面,它会定时地向 RM 汇报本节点上的资源使用情况和各个 Container 的运行状态;另一方面,它接收并处理来自 AM 的 Container 启动/停止 等各种命令。
四. Container
Container 是 YARN 中资源抽象,它封装了某个节点上的内存和 CPU,当 AM 向 RM 申请资源时,RM 为 AM 返回的资源便是用 Container 表示的。YARN 是使用轻量级资源隔离机制 Cgroups 进行资源隔离的。
YARN 通信协议
在 YARN 中,任何两个需要相互通信的组件之间仅有一个 RPC 协议,而对于任何一个 RPC 协议,通信双方有一端是 Client,另一端是 Server,且 Client 总是主动连接 Server。YARN 中有以下几个主要的 RPC 协议:
JobClient 与 RM 之间的协议:ApplicationClientProtocol,JobClient 通过该 RPC 协议提交应用程序、查询应用程序状态等
Admin(管理员)与 RM 之间的协议:ResourceManagerAdministrationProtocol,Admin 通过该 RPC 协议更新系统配置文件,比如节点黑白名单、用户队列权限等
AM 与 RM 之间的协议:ApplicationMasterProtocol,AM 通过该 RPC 协议向 RM 注册并撤销自己,并为各个人物申请资源
NM 与 RM 之间的协议:ResourceTracker,NM 通过该协议向 RM 注册,并定时发送心跳信息汇报当前节点的资源使用情况和 Container 运行情况,并接收来自 AM 的命令
AM 与 NM 之间的协议:ContainerManagermentProtocol,AM 通过该 RPC 协议要求 NM 启动或者停止 Container
YARN 工作流程
YARN 的工作流程如上所示:
Client 向 YARN 提交应用程序,其中包括 ApplicationMaster 程序及启动 ApplicationMaster 的命令
ResourceManager 为该 ApplicationMaster 分配第一个 Container,并与对应的 NodeManager 通信,要求它在这个 Container 中启动应用程序的 ApplicationMaster
ApplicationMaster 首先向 ResourceManager 注册
ApplicationMaster 为 Application 的任务申请并领取资源
领取到资源后,要求对应的 NodeManager 在 Container 中启动任务
NodeManager 收到 ApplicationMaster 的请求后,为任务设置好运行环境(包括环境变量、JAR 包、二进制程序等),将任务启动脚本写到一个脚本中,并通过运行该脚本启动任务
各个任务通过 RPC 协议向 ApplicationMaster 汇报自己的状态和进度,以让 ApplicationMaster 随时掌握各个任务的运行状态,从而可以在失败时重启任务
应用程序完成后,ApplicationMaster 向 ResourceManager 注销并关闭自己
需要注意的是,实际情况中,集群可能并没有那么多资源来满足 ApplicationMaster 的资源请求,这是 ApplicationMaster 会采用轮循的方式不断申请资源,直到申请到资源或 Application 结束为止。
一. ResourceManager
ResourceManager 是一个全局的资源管理器,负责整个集群的资源管理和分配。它主要由两个组件构成:调度器(Scheduler)和应用程序管理器(Applications Master,ASM)。
①调度器该调度器是一个 "纯调度器",不再参与任何与具体应用程序逻辑相关的工作,而仅根据各个应用程序的资源需求进行分配,资源分配的单位用一个资源抽象概念 "Container" 来表示。Container 封装了内存和 CPU。此外,调度器是一个可插拔的组件,用户可根据自己的需求设计新的调度器,YARN 自身提供了 Fair Scheduler 和 Capacity Scheduler。
②应用程序管理器应用程序管理器负责管理整个系统中所有应用程序,包括应用程序的提交、与调度器协商资源以启动 ApplicationMaster、监控 ApplicationMaster 运行状态并在失败时重新启动它等。
二. ApplicationMaster
用户提交的每个 Application 都要包含一个 ApplicatioNMaster,主要功能包括:
向 RM 调度器申请资源(用 Container 表示)
将从 RM 分配的资源分配给 Applcation 内部的任务
与 NM 通信请求 启动/停止 任务
监控所有任务的运行状态,并在失败时重新为任务申请资源以重启任务
三. NodeManager
NM 是每个节点上的资源和任务管理器,一方面,它会定时地向 RM 汇报本节点上的资源使用情况和各个 Container 的运行状态;另一方面,它接收并处理来自 AM 的 Container 启动/停止 等各种命令。
四. Container
Container 是 YARN 中资源抽象,它封装了某个节点上的内存和 CPU,当 AM 向 RM 申请资源时,RM 为 AM 返回的资源便是用 Container 表示的。YARN 是使用轻量级资源隔离机制 Cgroups 进行资源隔离的。
YARN 通信协议
在 YARN 中,任何两个需要相互通信的组件之间仅有一个 RPC 协议,而对于任何一个 RPC 协议,通信双方有一端是 Client,另一端是 Server,且 Client 总是主动连接 Server。YARN 中有以下几个主要的 RPC 协议:
JobClient 与 RM 之间的协议:ApplicationClientProtocol,JobClient 通过该 RPC 协议提交应用程序、查询应用程序状态等
Admin(管理员)与 RM 之间的协议:ResourceManagerAdministrationProtocol,Admin 通过该 RPC 协议更新系统配置文件,比如节点黑白名单、用户队列权限等
AM 与 RM 之间的协议:ApplicationMasterProtocol,AM 通过该 RPC 协议向 RM 注册并撤销自己,并为各个人物申请资源
NM 与 RM 之间的协议:ResourceTracker,NM 通过该协议向 RM 注册,并定时发送心跳信息汇报当前节点的资源使用情况和 Container 运行情况,并接收来自 AM 的命令
AM 与 NM 之间的协议:ContainerManagermentProtocol,AM 通过该 RPC 协议要求 NM 启动或者停止 Container
YARN 工作流程
YARN 的工作流程如上所示:
Client 向 YARN 提交应用程序,其中包括 ApplicationMaster 程序及启动 ApplicationMaster 的命令
ResourceManager 为该 ApplicationMaster 分配第一个 Container,并与对应的 NodeManager 通信,要求它在这个 Container 中启动应用程序的 ApplicationMaster
ApplicationMaster 首先向 ResourceManager 注册
ApplicationMaster 为 Application 的任务申请并领取资源
领取到资源后,要求对应的 NodeManager 在 Container 中启动任务
NodeManager 收到 ApplicationMaster 的请求后,为任务设置好运行环境(包括环境变量、JAR 包、二进制程序等),将任务启动脚本写到一个脚本中,并通过运行该脚本启动任务
各个任务通过 RPC 协议向 ApplicationMaster 汇报自己的状态和进度,以让 ApplicationMaster 随时掌握各个任务的运行状态,从而可以在失败时重启任务
应用程序完成后,ApplicationMaster 向 ResourceManager 注销并关闭自己
需要注意的是,实际情况中,集群可能并没有那么多资源来满足 ApplicationMaster 的资源请求,这是 ApplicationMaster 会采用轮循的方式不断申请资源,直到申请到资源或 Application 结束为止。
相关文章推荐
- 架构基础
- robots.txt 不让搜索引擎收录网站的方法
- iOS代码搜索网站
- 定义函数的方式,监控网站的存活状态
- 前端推荐学习网站
- ARM和X86架构之间区别以及性能比较杂谈
- 【local host】修改以测试还未上线的网站
- 【分享】腾讯蓝鲸体系架构及设计思想
- 本课分2部分讲解: 第一部分,讲解Kafka的概念、架构和用例场景; 第二部分,讲解Kafka的安装和实战。 由于时间关系,今天的课程只讲到如何用官网的例子验证Kafka的安装是否成功。后续课程
- Java 集合系列02之 Collection架构
- iOS应用架构谈-开篇
- java 实现模拟浏览器 访问网站
- iOS 架构模式-MVVM
- MySQL-HA高可用
- 以“不变应万变”,我们需要怎么做?
- 软件企业测试团队的组织架构
- 软件架构模式
- win7系统IE10浏览器打不开支付宝淘宝网站解决方法
- 网站运行状态检测工具
- 学习网站