`

YARN/MRv2 MRAppMaster深入剖析—ContainerLauncher分析

 
阅读更多

ContainerLauncher负责与NodeManager通信,以启动一个container。在YARN中,运行Task所需的全部信息被封装到Container中,包括所需资源、依赖的外部文件、jar包、运行时环境变量、运行命令等。ContainerLauncher通过ContainerManager协议与NodeManager通信,该协议定义了三个RPC接口,具体如下:

StartContainerResponse startContainer(StartContainerRequest request) throws YarnRemoteException;//启动一个container

StopContainerResponse stopContainer(StopContainerRequest request) throws YarnRemoteException;//停止一个container

GetContainerStatusResponse getContainerStatus(GetContainerStatusRequest request) throws YarnRemoteException;//获取一个container运行情况

ContainerLauncher是一个接口,它定义了2种事件:

(1)CONTAINER_REMOTE_LAUNCH 启动一个container。当ContainerAllocator为某个任务申请到资源后,会将运行该任务相关的所有信息封装到container中,并要求对应的节点启动该container

(2)CONTAINER_REMOTE_CLEANUP 停止/杀死一个container。存在多种可能触发该事件的行为,常见的有,1)推测执行时一个任务运行完成,则需杀死另一个同输入数据的任务 2)用户发送一个杀死任务请求 3)任意一个任务运行结束时,YARN会触发一个杀死任务的命令,以便结束对应进程。尤其需要注意的是第三种情况。

ContainerLauncher接口由ContainerLauncherImpl类实现,它是一个服务,接收和处理来自事件调度器发送过来的CONTAINER_REMOTE_LAUNCH和CONTAINER_REMOTE_CLEANUP两种事件,它采用了队列+进程池的方式异步并行处理这两种事件。

对于CONTAINER_REMOTE_LAUNCH事件,它会调用Container.launch()函数与对应的NodeManager通信,以启动container,代码如下:

proxy = getCMProxy(containerID, containerMgrAddress, containerToken);//构造一个RPC client

ContainerLaunchContext containerLaunchContext = event.getContainer();

StartContainerRequest startRequest = Records.newRecord(StartContainerRequest.class);

startRequest.setContainerLaunchContext(containerLaunchContext);

//调用RPC函数,获取返回值

StartContainerResponse response = proxy.startContainer(startRequest);

对于CONTAINER_REMOTE_CLEANUP事件,它会调用Container. kill()函数与对应的NodeManager通信,以杀死一个container,代码如下:

proxy = getCMProxy(this.containerID, this.containerMgrAddress,this.containerToken);

StopContainerRequest stopRequest = Records.newRecord(StopContainerRequest.class);

stopRequest.setContainerId(this.containerID);
proxy.stopContainer(stopRequest);

总之,ContainerLauncherImpl是一个非常简单的服务,其最核心的代码组织方式是队列+进程池,以处理事件调度器发送过来的CONTAINER_REMOTE_LAUNCH和CONTAINER_REMOTE_CLEANUP两种事件。

分享到:
评论

相关推荐

    YARN(MRv2)搭建

    YARN(MRv2)搭建

    yarn-v0.23.2.tar.gz

    yarn-v0.23.2.tar.gz 在安装ambari,源码编译的时候下载的文件有问题 手动下载 地址 https://github.com/yarnpkg/yarn/releases/download/v0.23.2/yarn-v0.23.2.tar.gz

    Flink on Yarn_K8S原理剖析及实践.pdf

    Apache Flink是一个开源的分布式流处理框架,用于在...通过这些资源,用户可以深入了解Flink在分布式环境中的运行机制,掌握在YARN/K8S平台上部署Flink集群的最佳实践,并对Flink的核心概念和技术细节有更全面的认识。

    【自动化脚本】自动启动hdfs/yarn/spark HA集群

    脚本使用:vim编辑脚本,按照自己的配置修改主机号,我的是hadoop1、2是NN;hadoop2、3是Spark Master;hadoop3还是RM;hadoop4、5、6是DN、NM、Spark Worker。编辑完成后在满足“前提”的任意一台主机运行均可。 ...

    yarn-v1.22.5.tar.gz

    2. **锁定文件**:Yarn 使用 `yarn.lock` 文件来确保所有开发者的环境中安装的包版本一致,解决了 npm 的版本漂移问题,提高了项目的可预测性和可重复性。 3. **并行下载**:Yarn 能够并行下载依赖包,显著提升了...

    YARN应用开发与核心源码剖析.pdf

    对于深入理解YARN的工作机制,对源码的剖析是非常必要的。这有助于开发者更准确地把握各个组件之间的交互细节,从而更好地利用YARN的功能。例如,通过跟踪`getNewApplication`和`submitApplication`方法的具体实现,...

    YARN框架代码详细分析

    3. MRAppMaster分配器:涉及MRAppMaster的代码分析、任务周期管理及资源分配、以及shuffle过程。MRAppMaster负责应用程序的任务调度、监控、资源管理等,而shuffle过程则主要涉及MapReduce任务的数据排序和重分布。 ...

    Yarn框架代码详细分析

    YARN的WEB框架解析包括了对YARN WEB界面代码的分析以及它提供的一些功能,如集群信息的查看、资源使用情况的监控等。 总之,YARN作为Hadoop生态系统中的重要组件,通过它的设计和代码实现了对大规模分布式计算资源...

    使用yarn create umi安装Ant Design Pro时报错TypeError: self.env.emit is not a function

    TypeError: self.env.emit is not a function at /usr/local/share/.config/yarn/global/node_modules/yeoman-generator/lib/index.js:653:22 at processTicksAndRejections (internal/process/task_queues.js:97:5)...

    使用 Redis,Redict,Valkey,等进行 express-rate-limit 的速率限制存储 .zip

    rate-limit-redis redis中间件的存储 。...安装来自 npm 注册表# Using npm> npm install rate-limit-redis# Using yarn or pnpm> yarn/pnpm add rate-limit-redis来自 Github 发布# Using npm> npm install ...

    yarn-workspace-plugin-since

    在深入探讨这个插件之前,我们首先需要理解Yarn工作区的基本概念。 Yarn工作区是Yarn包管理器的一个特性,允许在一个大的项目中管理多个相互依赖的子项目或库。它通过在根目录创建一个`package.json`文件,并在其中...

    Yarn框架代码详细分析V0.3.pdf

    ### Yarn框架代码详细分析V0.3.pdf 知识点提炼 #### 一、Yarn框架概述 ...通过对各个模块及其功能的深入分析,我们可以更好地理解YARN的工作原理和应用场景,这对于开发和维护基于YARN的大规模分布式系统至关重要。

    SPARK2_ON_YARN-2.4.0.cloudera2.jar

    SPARK2_ON_YARN-2.4.0 jar包下载

    YARN Essentials.PDF

    - **MapReduce v2 (MRv2):** 作为 YARN 的一部分,支持新的 API,提高了灵活性和性能。 **2. MapReduce v1 与 MapReduce v2 的对比:** - **API 变更:** MRv2 提供了新的 API,允许开发者编写更复杂的应用程序。 ...

    Hadoop的yarn详解

    Hadoop的YARN架构是Hadoop版本2.x引入的一个重要组件,它负责处理资源管理和作业调度,而核心的计算任务处理则交给了MapReduce、Tez、Spark等计算框架。YARN的出现是为了解决Hadoop早期版本中的可扩展性问题,它通过...

    Yarn获取Application列表编码

    获取 Application 列表编码是 Yarn 中的一种常见操作,本文将对其进行详细的分析和介绍。 Yarn 获取 Application 列表编码概述 Yarn 获取 Application 列表编码是指通过 Yarn 客户端 API 获取当前 Hadoop 集群中的...

    YARN.Essentials

    这里首先介绍了Hadoop 2.x的发布,对Hadoop 1.x及其MapReduce API的简要介绍,以及MRv1与MRv2的对比。接着,文档讨论了YARN在Hadoop中的作用,以及MapReduce API的向后兼容性和org.apache.hadoop.mapred API的二进制...

    Hadoop技术内幕深入解析YARN架构设计与实现原理PDF

    《Hadoop技术内幕深入解析YARN架构设计与实现原理》这本书深入探讨了Hadoop生态系统中的核心组件YARN(Yet Another Resource Negotiator),它是Hadoop 2.x版本中的关键改进,旨在解决早期Hadoop MapReduce的资源...

Global site tag (gtag.js) - Google Analytics