Hadoop -YARN 应用程序设计概述

一概述

应用程序是用户编写的处理数据的统称,它从YARN中申请资源完成自己的计算任务。YARN自身对应用程序类型没有任何限制,它可以是处理短类型任务的MapReduce作业,也可以是部署长时间运行的服务的应用程序。应用程序可以向YARN申请资源完成各类计算任务。

在YARN上开发一个应用程序,通常而言,需要开发两个组件,分别是客户端和ApplicationMaster,其中客户端主要作用是将应用程序提交到YARN上,并与YARN 和Application
Master进行交互,查询应用程序的状态,完成用户发送的一些命令。而ApplicationMaster则负责向YARN申请资源,并与NodeManager通信以启动各个Container,此外ApplicationMaster还负责监控各个任务运行状态,并在失败的时候为其重新申请资源。

YARN驱动使用“应用提交客户端(Application Submission Clien)”将一个“应用”提交给YARN资源管理器。借助“ClientRMProtocol”,客户端先获取一个新的“应用ID”,然后提交运行 “应用”。应用提交的信息里,包含应用Master要启动的Unix进程信息。提交信息还描述了应用运行要使用的本地文件、jar包,执行需要的实际命令,
以及各种Unix环境设置等。

二 客户端设计

YARN appliction客户端需要实现ApplicationClientProtocol协议,该协议提供一系列访问接口供用户与YARN交互,包括提交Application、查询Application运行状态、修改Application的属性(优先级)、杀死应用程序等。其中最重要的访问接口之一是提交application的函数。通常涉及下面两个步骤:

步骤1:客户端创建一个ApplicationClientProtocol#getNewApplication从ResourceManager中获取唯一的一个APP ID.

步骤2:Client通过RPC函数ApplicaitonClientProtocol#submitApplication将Application Master提交到RM上。

一个功能完备的YARN客户端,不仅需要与ResourceManger交互,还需要与ApplicationMaster交互以查询应用程序的内部状态(通常ResourceManager中没有与某个应用相关的信息)或者控制应用程序内部的任务(比如杀死任务,同样,ResourceManager中也不会有具体任务相关信息),这一部分需要由应用程序自己设计通信协议。

注:在实际使用中为了减轻ResourceManager的负载,一旦应用程序的ApplicationMaster成功启动之后,客户端通常直接与ApplicationMaster通信,以查询它的运行状态或者控制它的执行流程(比如杀死一个任务等)。

三 ApplicationMaster设计

AM需要与RM和NM两个服务交互,通过与RM交互,AM可获得任务计算所需的资源;通过与NM交互,AM可以启动计算任务,并监控它直到完成。

AM-RM编写流程

AM与RM之间通信涉及三个步骤,具体如下:

1.注册

AM启动的时候,首先向RM注册,注册信息封装到Protoclo Buffers消息RegisterApplicationMasterQuest中,主要包括一下字段:

a.host  AM本次启动所在的结点host

b.rpc_host:AM本次启动对外的RPC端口号

c.tracking_url:AM对外提供的追踪Web URL,客户端可通过该tracking_url查询应用程序执行状态。

注册成功后会收到以下信息:

a.最大可申请的单个container占用的资源量。

b.client_to_am_token_master_key:ClientToAMTokenMasterKey

c.application_ACLs:应用程序访问控制列表

2.资源申请

ApplicationMaster通过RPC函数ApplicationMasterProtocol#allocate向ResourceManager申请资源(以Container的形式).

请求数据格式主要包括以下字段:

2.1.ask: Application Master请求的资源列表,每个资源请求用ResourceRequest表示,用户可使用AllocateRequest#getAskList/AllocateRequest#SetAskList获取或设置请求资源列表。

ResouceRequest包含已下字段:

a.priority:资源优先级,为一个正整数,值越小,优先级越高。

b.resource_name:期望资源所在的节点或者是机架,如果是"*",表示任何节点上的资源均可以。

c.capability:所需的资源量,当前支持CPU和内存两种资源

d.num_containers:所需要满足以上条件的资源数目

e.relax_locality:是否松弛本地性,即是否在没有满足节点本地性资源时,自动选择机架本地性资源或者其它资源。

2.2.release:AM释放container列表

2.3.response_id:本次 通信的应答ID,每次通信,该值都会加1.

2.4.progress:应用程序的执行进度。

2.5.blacklist_request:请求加入/移除黑名单的结点列表

注:即使AM不需要任何的资源,它仍然需要周期性调用ApplicationProtoclo#allocate函数以维持与ResourceManager之间的心跳,否则,如果一定时间内RM未收到任何来自AM的消息,则系统会认为它已经死掉了,会将其从系统中移除或者触发容错机制。AM每隔1000秒发送一次RPC资源请求。

响应信息如下:

a_m_command: ApplicationMaster需执行的命令,目前主要有两个取值,分别是AM_RESYNC和AM_SHUTDOWN,分别表示重启和关闭。

当RM发现AM所在结点处于黑名单中时,RM让AM关闭。

response_id:本次通信的应答ID,每次通信,该值都会加一。

allocated_containers:分配给应用程序的Container列表。RM将每一份可用的资源封装成一个Container,该Container中有关于这份资源的详细信息,通常而言,ApplicationMaster在收到一个 Container后,会在这个Container中运行一个任务。

completed_container_statuses:运行完成的Container状态列表,需要注意的是,该列表中的Container所处的状态可能是运行成功、运行失败和被杀死。

limit:目前集群可用的资源总量

updated_nodes:当前集群中所有结点运行状态列表。

num_cluster_nodes:当前集群中可用节点总数

3.程序退出

AM通过RPC函数ApplicationMasterProtocol$finishApplicationMaster告诉RM应用程序执行完毕,并退出。

AM-NM编写流程

1.AM将申请到的资源二次分配给内部的任务,并通过RPC函数ContainerManagementProtocol#startContainer与对应的NodeManger通信以启动Container(包含任务描述、资源描述等信息),该 函数的参数类型为StartContainersRequest

2.为了掌握各个Container运行状态,AM会通过RPC函数向NM询问Container运行状态,一旦发现某个Container运行失败,AM可尝试重新为对应的任务申请资源。

3.一旦一个Container运行完成后,AM可以通过RPC函数ContainerManagementProtocol#stopContainer释放Container.

注:  1.YARN 是一个资源管理系统,它不仅要负责分配资源,还负责回收资源。当一个Container运行完后,它会主动确认Container是否将对应的资源释放掉了,也就是说,任何一个Container运行结束后,AM必须调用RPC函数ContainerManagementProtcol#stopContainer释放Container.

 四小结

用户想要编写一个运行在YARN上的应用程序时,通常需要实现两个组件,分别是客户端和ApplicationMaster,其中客户端主要用于提交应用程序和管理应用程序,而ApplicationMaster则负责实现应用程序的任务切分、调度、监控等功能。

Hadoop -YARN 应用程序设计概述

时间: 2024-10-14 22:39:25

Hadoop -YARN 应用程序设计概述的相关文章

Hadoop - YARN 概述

一 概述 Apache Hadoop YARN (Yet Another Resource Negotiator,还有一种资源协调者)是一种新的 Hadoop 资源管理器,它是一个通用资源管理系统.可为上层应用提供统一的资源管理和调度,它的引入为集群在利用率.资源统一管理和数据共享等方面带来了巨大优点. YARN最初是为了修复MapReduce实现里的明显不足,并对可伸缩性(支持一万个节点和二十万个内核的集群).可靠性和集群利用率进行了提升.YARN实现这些需求的方式是,把Job Tracker

Apache Hadoop YARN: 背景及概述

从2012年8月开始Apache Hadoop YARN(YARN = Yet Another Resource Negotiator)成了Apache Hadoop的一项子工程.自此Apache Hadoop由下面四个子工程组成: Hadoop Comon:核心库,为其他部分服务 Hadoop HDFS:分布式存储系统 Hadoop MapReduce:MapReduce模型的开源实现 Hadoop YARN:新一代Hadoop数据处理框架 概括来说,Hadoop YARN的目的是使得Hado

YARN分析系列之二 -- Hadoop YARN各个自模块说明

先做如下声明,本代码版本是基于 3.1.2 版本. 其实,我们自己在写代码的时候,会有意识地将比较大的功能项独立成包,独立成module, 独立成项目,项目之间的关系既容易阅读理解,又便于管理. 如下,是hadoop-yarn-project的module截图: Hadoop YARN 的大部分功能在 hadoop-yarn-project module 下,现将该module下各个module 的功能做一个大致的说明[顺序按上面截图自上而下]: hadoop-yarn-api:YARN的跨平台

决胜大数据时代:Hadoop&Yarn&Spark企业级最佳实践(8天完整版脱产式培训版本)

Hadoop.Yarn.Spark是企业构建生产环境下大数据中心的关键技术,也是大数据处理的核心技术,是每个云计算大数据工程师必修课. 课程简介 大数据时代的精髓技术在于Hadoop.Yarn.Spark,是大数据时代公司和个人必须掌握和使用的核心内容. Hadoop.Yarn.Spark是Yahoo!.阿里淘宝等公司公认的大数据时代的三大核心技术,是大数据处理的灵魂,是云计算大数据时代的技术命脉之所在,以Hadoop.Yarn.Spark为基石构建起来云计算大数据中心广泛运行于Yahoo!.阿

Hadoop YARN资源隔离技术

YARN对内存资源和CPU资源采用了不同的资源隔离方案.对于内存资源,它是一种限制性资源,它的量的大小直接决定应用程序的死活,因为应用程序到达内存限制,会发生OOM,就会被杀死.CPU资源一般用Cgroups进行资源控制,Cgroups控制资源测试可以参见这篇博文Cgroups控制cpu,内存,io示例,内存资源隔离除Cgroups之外提供了另外一个更灵活的方案,就是线程监控方案. 默认情况下YARN采用线程监控的方案控制内存使用,采用这种机制的原因有两点: 1.Java创建子进程采用了"for

java核心技术学习笔记之一程序设计概述

Java 核心技术之一程序设计概述 一.   Java语言的特点 简单行 :取经于C++,排除了C++不常用的指针.结构等,增加垃圾回收. 面向对象:与C++不同是单继承,但是可以继承多接口.完全面向对象的语言: 网络技能:Socket,FTP,Http,URL编程简单: 健壮性:避免指针错误使用: 安全性:构建防病毒防篡改系统: 体系结构中立:字节码: 可移植性: 解释性:可以解释任何移植了的字节码: 高性能: 多线程 动态性: 二.   Internet 和 Java Applet 在网页中

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/hadoop/yarn/util/Apps Hadoop2.6.0编程问题与解决

从hadoop 1.2.1升级到 Hadoop2.6.0,调试写代码,还是遇到一些问题的.这里记录一下,后续如果自己再遇到类似问题,那也好找原因了. 在eclipse里编译运行 WordCount,出现以下错误. Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/hadoop/yarn/util/Apps at java.lang.ClassLoader.defineClass1(Native M

hadoop yarn 运行wordcount时执行完成,但是返回错误

错误信息如下: 15/09/05 03:48:02 INFO mapreduce.Job: Job job_1441395011668_0001 failed with state FAILED due to: Application application_1441395011668_0001 failed 2 times due to AM Container for appattempt_1441395011668_0001_000002 exited with exitCode: 1 F

Apache Hadoop YARN: Moving beyond MapReduce and Batch Processing with Apache Hadoop 2

Apache Hadoop YARN: Moving beyond MapReduce and Batch Processing with Apache Hadoop 2 .mobi: http://www.t00y.com/file/79497801 Apache Hadoop YARN: Moving beyond MapReduce and Batch Processing with Apache Hadoop 2.pdf: http://www.t00y.com/file/8034244