前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Yarn源码之ApplicationClientProtocol

Yarn源码之ApplicationClientProtocol

原创
作者头像
reisende
发布2021-10-17 20:53:29
8920
发布2021-10-17 20:53:29
举报
文章被收录于专栏:LebenLeben

导语

yarn通过Protocol协议层来沟通接口层和核心逻辑层。

ApplicationClientProtocol协议负责的就是Client和ResourceManager的交互逻辑。主要功能是submit/abort jobs(提交/终止任务)和get information from applications(获取应用信息)以及get cluster metrics(获取集群指标)。本文将围绕主要功能展开

概述

ApplicaitionBaseProtocol

这个协议继承了ApplicaitionBaseProtocol接口,这是因为获取应用信息,获取容器信息,管理Delegation token(委托标记)这些功能是可以被其他协议复用的,所以提取出了一个base接口

抛开父接口要做的事情,ApplicationClientProtocol独属的功能就只剩下了几个

getNewApplication 获取一个新的ApplicaitonId,并获取RM当前可供分配的最大资源

submitApplication 正式提交一个应用,需要包含该应用的详细信息,例如queue,resource,containerLaunchContext等

forceKillApplication 强制杀死一个应用

getClusterMetrics 获取集群指标

getClusterNodes 获取集群节点报告

三个实现

三个实现分别位于三个层

ApplicationClientProtocolPBClientImpl,位于接口层,直接被client接口调用提供给用户

ClientRMService,位于核心逻辑层,由RM实现,包含所有的核心交互逻辑

ClientRMProtocols,位于Poxy代理交互层,用于向接口层暴露调用接口

提交任务总流程

client发出请求

client调用getNewApplication方法

rmClient其实就是协议接口,在serviceStart中被初始化

请求给到代理层

这里通过ClientRMProxy(所有RM相关的协议对象获取都会从这个代理中获取)创建了一个协议的Proxy对象,封装了协议相关的信息以及所有相关的RPC操作

这个Proxy对象实际上就是上面讲的ApplicationClientProtocolPBClientImpl实例,所以调用实际上给到了ApplicationClientProtocolPBClientImpl#getNewApplication

这个proxy对象就是真正从RPC类创建的RPC代理了,之后经过代理层的请求转发,请求就会给到RM部署的机器上

RM接受请求

这时候,请求给到了ClientRMService#getNewApplication

分配ID

RM分配了一个新的ApplicationId。根据当前的集群时间戳和一个递增的Counter作为Id

获取资源信息

然后通过YarnScheduler获取资源信息

这个请求最终是给到了ClusterNodeTracker#getMaxAllowedAllocation

可以看到,这里直接clone了configuredMaxAllocation变量,这个变量是会被YarnScheduler不断刷新的。

在CapacityScheduler#initScheduler中,初始化调度器时会第一次设置最大资源

在CapacityScheduler#reinitialize中,当调度器(不管是fifo还是fair)接受了一个新任务分配了资源后都会刷新这个最大资源参数

最后就会返回结果了

client提交任务

client完成一系列参数设置之后提交任务

请求传递的逻辑和前面是一样的,所以直接讲处理逻辑

RM接受请求

ClientRMService#submitApplication

用户权限校验

检查应用是否已经存在

防止并发请求重复创建

检查容器Token是否过期

设置队列

由RMAppMaster接受任务处理

然后就完成了任务的提交了

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 导语
  • 概述
    • ApplicaitionBaseProtocol
      • 三个实现
      • 提交任务总流程
        • client发出请求
          • client调用getNewApplication方法
            • 请求给到代理层
              • RM接受请求
                • 分配ID
                • 获取资源信息
              • client提交任务
                • RM接受请求
                  • 用户权限校验
                  • 检查应用是否已经存在
                  • 检查容器Token是否过期
                  • 设置队列
              相关产品与服务
              容器服务
              腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档