暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Yarn应用开发真的很费劲

CodingWithFun 2019-08-13
566
Hadoop Yarn是Hadoop集群资源管理器,可在其之上运行的程序就可称之为Yarn应用,包括常见的MapReduce、Spark、Flink、Hive、Tez等都是Yarn应用。yarn应用开发比较复杂,需对Yarn本身架构比较了解,一般的大数据工程师还是使用现有的Yarn程序,通过回调的方式运行自己的业务代码。没错,写的MapReduce、Spark DAG Action都是可认为是回调。本文简单介绍一下一个yarn应用如何来开发。

首先,我们先来了解一下Hadoop的发展历程。
在Hadoop 1.0时代,只能使用MapReduce,资源调度与计算引擎是一个整体,可认为MapReduce+HDFS=Hadoop 1.0。

由于MapReduce自身设计的一些缺陷,导致整个集群的扩展性不足、集群使用率低、多租户支持等诸多问题,同时新的计算引擎不断涌现。于是,在Hadoop2.0时代,将资源管理部分进行了抽离,形成了Yarn,定位成支持大规模资源调度、数据中心分布式操作系统,支持多种分布式应用。

说完了Yarn的起源,我们看看Yarn由哪些部分组成。
Yarn是典型的Master/Slave架构,下面依次介绍个角色:


  • ResourceManager(RM):Yarn的Master节点,负责对整个集群资源进行统一的管理与调度,核心组件有调度器与应用管理器;

  • NodeManager(NM):Yarn的Slave节点,在集群的每个节点上都部署,定期向ResourceManager汇报本节点资源使用情况、启停容器;

  • Container:Yarn的资源抽象,代表节点的部分资源,目前支持CPU、内存。一个Container同时绑定这一个进程,通常说启停Container就是指启停其代表的进程;

  • Client:Yarn客户端,可提交yarn应用,spark的spark-submit就是spark的客户端;

  • ApplicationMaster(AM):每个Yarn应用都包含一个特定的AM,是一个应用第一个启动的Container。其主要功能有:向RM申请资源、与NM通信启停Container、监控计算任务状态,失败时进行容错处理;


Yarn应用开发要做哪些工作。

要写两大组件:Client和AM。Client负责RM申请资源,提交AM,并可持续查询跟踪AM的运行状态。Client的具体运行流程如下:

  1. 客户端调用RPC函数ApplicationClientProtocal#getNewApplication,申请应用运行唯一的application ID;

  2. 客户端将AM启动必要的资源文件,如jar包、配置文件等上传HDFS;

  3. 构造ApplicationSubmissionContext对象,里面包含了AppId, AppType,  AppName等信息,以及启动AM需要的ContainerLauchContext, 其包含启动AM需要的环境变量、资源文件地址,启动命令等;

  4. 客户端调用ApplicationClientProtocal#submitApplication将ApplicationSubmissionContext提交给RM;

直此客户端的主要任务已经完成。不过一个功能完备的客户端,不仅需要与RM交互,还需要与AM交互以查询应用程序内部的信息,甚至控制应用程序的执行。这一部分同样需要由应用程序自己设计实现。


客户端提交完成后,RM分配启动AM所需的资源,对应的NM负责启动AM进程。启动AM后,其运行流程如下:
  1. AM向RM进行注册,注册完成后,应用的状态会从ACCEPT变成RUNNING。如果AM一直不进行注册,默认10分钟后RM会杀死该AM;
  2. AM通过RPC函数ApplicationMAsterProtocol#allocate向RM申请资源,即使AM不再需要申请资源也需要周期性调用该函数,以保持与RM之间的心跳;
  3. AM申请到资源后,进行再次分配给内部的任务,通过直接与NM通信启动Container;
  4. 一旦整个应用完成,AM通过RPC函数ApplicationMasterProtocol# finishApplication告诉RM应用程序执行完毕,并退出;


Yarn的编程比较复杂,尤其应用自身任务的容错都靠自己实现,所有必须亲自动手实践才能真正掌握Yarn编程。本人github上有yarn应用的项目Thallo:https://github.com/loveoobaby/Thallo,有兴趣的同学可以参阅。







文章转载自CodingWithFun,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论