

【深入浅出 Yarn 架构与实现】4-4 RM 管理 Application - 大数据王小皮
source link: https://www.cnblogs.com/shuofxz/p/17044622.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

在 YARN 中,Application 是指应用程序,它可能启动多个运行实例,每个运行实例由 —个 ApplicationMaster 与一组该 ApplicationMaster 启动的任务组成,它拥有名称、队列、优先级等属性,是一个比较宽泛的概念,可以是一个 MepReduce 作业、一个 DAG 应用程序等。YARN 中 Application 管理涉及应用程序的权限管理、启动与关闭、生命周期管理等,本节只介绍最基本的管理内容,比如权限管理、启动与关闭等,而生命周期管理则放到下一节中介绍。
一、ApplicationACLsManager#
ApplicationACLsManager 负责管理应用程序访问权限
- 查看权限
- 程序基本信息:运行时间、优先级等
- 修改权限
- 修改程序优先级、杀死应用程序
二、RMAppManager#
RMAppManager
负责应用程序启动和关闭。接下来结合源码主要分析启动和结束两个操作。
1、启动#
在「4-1 ResourceManager 功能概述」中,提到了 ClientRMService
处理来自客户端各种 RPC 请求,比如提交、终止获取应用运行状态等。ClientRMService
当收到客户端提交的应用后,将调用函数 RMAppManager#submitApplication
创建一个 RMApp
对象,维护应用程序的整个生命周期。
protected void submitApplication() {
// 创建 app,并添加到 RMActiveServiceContext.applications
RMAppImpl application =
createAndPopulateNewRMApp(submissionContext, submitTime, user, false);
// 发送 app start event,继续由其他事件处理器处理
this.rmContext.getDispatcher().getEventHandler()
.handle(new RMAppEvent(applicationId, RMAppEventType.START));
}
2、结束#
当 RMAPP 运行结束后,将向 RMAPPManager 发送一个 RMAPPManagerEventType.APP_COMPLETED
事件。看源码将执行 3 个操作:
public void handle(RMAppManagerEvent event) {
ApplicationId applicationId = event.getApplicationId();
LOG.debug("RMAppManager processing event for "
+ applicationId + " of type " + event.getType());
switch(event.getType()) {
case APP_COMPLETED:
{
finishApplication(applicationId);
logApplicationSummary(applicationId);
checkAppNumCompletedLimit();
}
finishApplication()
- 将 Application 放入到内存的已完成列表
completedApps
中,用户可查询历史应用执行信息(如 yarn web)。
- 将 Application 放入到内存的已完成列表
logApplicationSummary()
- 打印日志信息。
checkAppNumCompletedLimit()
- 上面提到的
completedApps
列表容量有限,默认 10000,可修改。超过该值时,将从在这里被移除,后续可从 History Server 中进行查看。 - 将应用程序从
RMStateStore
中移除。RMStateStore 记录了运行中的应用程序的运行日志,当集群故障重启后,RM 可通过这些日志恢复应用程序运行状态,从而避免全部重新运行,一旦应用程序运行结束后,这些日志便失去了意义, 故可以对其进行删除。
- 上面提到的
三、ContainerAllocationExpirer#
当 AM 获得 Container 后,必须在一定时间内(默认为 10min,可修改),在对应的 NM 上启动该 Container,否则 RM 将强制回收该 Container。因为 YARN 不允许 AM 长时间不对其使用,会降低整个集群的利用率。
protected void expire(AllocationExpirationInfo allocationExpirationInfo) {
dispatcher.handle(new ContainerExpiredSchedulerEvent(
allocationExpirationInfo.getContainerId(),
allocationExpirationInfo.isIncrease()));
}
该类也继承自抽象类 AbstractLivelinessMonitor
,前面已经讲过,这里不再赘述。
Recommend
-
2
了解 Yarn 基础库是后面阅读 Yarn 源码的基础,本节对 Yarn 基础库做总体的介绍。并对其中使用的第三方库 Protocol Buffers 和 Avro 是什么、怎么用做简要的介绍。 一、主要使用的库 Protocol Buffers
-
3
RPC(Remote Procedure Call) 是 Hadoop 服务通信的关键库,支撑上层分布式环境下复杂的进程间(Inter-Process Communication, IPC)通信逻辑,是分布式系统的基础。允许运行于一台计算机上的程序像调用本地方法一样,调用另一台计算机的子程序。由于 RPC 服...
-
6
一个庞大的分布式系统,各个组件间是如何协调工作的?组件是如何解耦的?线程运行如何更高效,减少阻塞带来的低效问题?本节将对 Yarn 的服务库和事件库进行介绍,看看 Yarn 是如何解决这些问题的。 一、服务库 对于生命周期较长的对...
-
3
当一个服务拥有太多处理逻辑时,会导致代码结构异常的混乱,很难分辨一段逻辑是在哪个阶段发挥作用的。 这时就可以引入状态机模型,帮助代码结构变得清晰。 一、状态机库概述 状态机由一组状态组成: 【初始状态 -...
-
2
【深入浅出 Yarn 架构与实现】3-1 Yarn Application 流程与编写方法 本篇学习 Yarn Application 编写方法,将带你更清楚的了解一个任务是如何提交到 Ya...
-
13
本篇文章继续介绍 Yarn Application 中 ApplicationMaster 部分的编写方法。 一、Application Master 编写方法 上一节讲了 Client 提交任务给 RM 的全流程,RM 收到任务后,由 ApplicationsManager...
-
13
本篇继续对 RM 中管理 NodeManager 的部分进行深入的讲解。主要有三个部分:检查 NM 是否存活;管理 NM 的黑白名单;响应 NM RPC 请求。 一、简介
-
2
一、简介# NodeManager(NM)中的状态机分为三类:Application、Container 和 LocalizedResource,它们均直接或者间接参与维护一...
-
4
本篇文章将带大家运行 Flink 最简单的程序 WordCount。先实践后理论,对其基本输入输出、编程代码有初步了解,后续篇章再对 Flink 的各种概念和架构进行介绍。 下面将从创建项目开始,介绍如何创建出一个 Flink 项目;然后从 DataStream 流处理和 FlinkSQL 执...
-
6
前面几篇文章带大家了解了 Flink 是什么、能做什么,本篇将带大家了解 Flink 究竟是如何完成这些的,Flink 本身架构是什么样的,让大家先对 Flink 有整体认知,便于后期理解。 一、Flink 组件栈
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK