Yarn应用程序开发和设计流程

概述

        YARN是一个资源管理系统,负责集群资源的管理和调度。如果想要将一个新的应用程序运行在YARN之上,通常需要编写两个组件Client客户端和ApplicationMaster。其中,Client负责向ResourceManager提交ApplicationMaster,并查询应用程序运行状态;ApplicationMaster负责向ResourceManager申请资源(以Container形式表示),并与NodeManager通信以启动各Container,此外,ApplicationMaster还负责监控各个任务运行状态,并在失败时为其重新申请资源。通常而言,编写一个YARNAppcalition会涉及3个RPC协议,分别为:

  • ApplicationClientProtocol(用于Client与ResourceManager之间):Client通过该协议可实现将应用程序提交到ResourceManager上、查询应用程序的运行状态或者杀死应用程序等功能。
  • ApplicationMasterProtocol(用于ApplicationMaster与ResourceManager之间):ApplicationMaster使用该协议向ResourceManager注册、申请资源、获取各个任务运行情况等。
  • ContainerManagementProtocol(用于ApplicationMaster与NodeManager之间):ApplicationMaster使用该协议要求NodeManager启动/撤销Container或者查询Container的运行状态。

 

Client客户端设计

        Client的开发设计其主要是用于提交(部署)应用和监控应用运行两个部分;YARNApplication客户端会提供一系列访问接口供用户与YARN交互;包括提交Application、查询Application运行状态、修改Application属性(如优先级)等。其中最重要的访问接口之一是提交Application的函数。其客户端设计流程如下:

  1. Client通过RPC函数ApplicationClientProtocol#getNewApplication从ResourceManager中获取唯一的ApplicationID。
  2. Client通过RPC函数ApplicationClientProtocol#submitApplication【所有信息都封装在这个参数里】将ApplicationMaster提交到ResourceManager上。填充一定应用程序的信息:比如ApplicationMaster需要多少资源,ApplicationMaster运行jar包是什么,启动命令是什么等等。
  3. RM根据ApplicationSubmissionContext上封装的内容启动AM。
  4. 客户端通过AM或RM获取应用的运行状态,并控制应用的运行过程。

 

ApplicationMaster设计

   ApplicationMaster(AM)需要与ResourceManager(RM)和NodeManager(NM)两个服务交互;其设计流程如下两个部分:

  1. 通过与ResourceManager交互,ApplicationMaster可获得任务计算所需的资源。
  2. 通过与NodeManager交互,ApplicationMaster可启动计算任务(container),并监控它直到运行完成。

AM与RM交互:资源申请

  1. ApplicationMaster通过RPC函数ApplicationMasterProtocol#registerApplicationMaster向ResourceManager注册;
    1. 注册的时候会告诉ResourceManager自己的ip端口;
    2. 注册完成后会返回一些信息:如ApplicationMaster最大资源申请量、访问token、应用程序访问控制列表等;
  2. ApplicationMaster通过RPC函数ApplicationMasterProtocol#allocate向ResourceManager申请资源(以Container形式表示);
    1. allocate是一个RPC函数,ApplicationMaster启动后,会知道内部的task数目和每个task需要申请分配的资源量,其会周期性的通过allocate向ResourceManager申请container资源;
    2. 在周期性的allocate资源申请过程中,其会维护与ResourceManager之间的心跳信息,告诉ResourceManager当前的ApplicationMaster处于alive状态以及其上container的运行状态;并且会从ResourceManager中获取到对应申请到的container资源以及需要被其他程序抢占资源所释放的container列表,在申请到对应的container资源后,ApplicationMaster会与NodeManageer通信来启动对应的task;
  3. ApplicationMaster通过RPC函数ApplicationMasterProtocol#finishApplicationMaster告诉ResourceManager应用程序执行完毕,并退出。

AM与NM交互:启动container、查询container状态、停止container

  1. ApplicationMaster将申请到的资源二次分配给内部的任务,并通过RPC函数ContainerManagementProtocol#startContainer与对应的NodeManager通信以启动Container(包含任务描述,资源描述等信息),该函数的参数类型为StartContainerRequest,主要包含一个类型为StartContainerRequest的字段;
  2. ApplicationMaster可通过RPC函数ContainerManagementProtocol#getContainerStatus向NodeManager询问Container运行状态,一旦发现某个Container运行失败,ApplicationMaster可尝试重新为对应的任务申请资源并再次启动该任务;
  3. 一旦一个Container运行完成后,ApplicationMaster可以通过RPC函数ContainerManagementProtocol#stopContainer释放该Container,回收该Container所占用的资源;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spark是一个快速、通用的大数据处理框架,它提供了高效的数据处理能力和丰富的API,可以在分布式环境进行大规模数据处理和分析。而YARN(Yet Another Resource Negotiator)是Hadoop生态系统资源管理器,用于管理集群的计算资源。 在使用Spark开发程序,可以选择将Spark应用程序部署在YARN上,以实现资源的有效管理和利用。下面是一些关键步骤: 1. 安装和配置Spark和YARN:首先需要安装和配置Spark和YARN环境,确保它们能够正常运行并相互配合。 2. 编写Spark应用程序:使用Scala、Java或Python等编程语言编写Spark应用程序。Spark提供了丰富的API,可以进行数据读取、转换、处理和分析等操作。 3. 配置应用程序参数:在应用程序,需要设置一些参数来指定Spark的运行方式和资源需求。例如,可以设置应用程序需要的内存、CPU核数等。 4. 打包应用程序:将应用程序打包成可执行的JAR文件或Python脚本,并将其上传到集群。 5. 提交应用程序:使用spark-submit命令将应用程序提交给YARN进行执行。该命令会将应用程序的JAR文件或Python脚本发送给YARN,并指定所需的资源和其他参数。 6. 监控和调优:在应用程序运行期间,可以通过Spark的Web界面或YARN监控工具来监控应用程序的运行状态和性能指标。根据监控结果,可以进行调优以提高应用程序的性能和效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值