1. 编写YARN应用程序

通过编写一个YARN Application 来了解Hadoop YARN YARN是Hadoop中的一个cluster资源管理系统。 MapReduce 就是泡在YARN 之上的,其关系如下图, MapReduce 通过YARN 在cluster内申请内存和cpu资源,YARN执行MapReduce Task.   最近学习了YARN, 从部署的角度YARN支持三种调度器:FIFO, Capacity 和 Fair。 从开发应用程序的角度,实现一个YA 阅读详情

参考:如何编写YARN应用程序

1. 概述

YARN是一个资源管理系统,负责集群资源的管理和分配。如果想要将一个新的应用程序运行在YARN之上,通常需要编写两个组件:

  • 客户端
  • ApplicationMaster

由于这两个组件编写非常复杂,尤其ApplicationMaster,需要考虑RPC调用、任务容错等细节,所以,往往由专业的开发人员编写这两个组件,并提供给上层的应用程序用户使用。如果大量应用程序可抽象成一种通用框架,那么只需实现一个客户端和一个ApplicationMaster,然后让所有应用程序重用这两个组件即可,比如MapReduce是一种通用的计算框架,YARN已经为其实现了一个直接可以使用的客户端—MRClientService和ApplicationMaster—MRAppMaster。

本文主要介绍了如何让一种新的应用程序,或者新的计算框架,运行于YARN之上。正如前面介绍的,用户需要编写两个组件完成该任务:客户端和ApplicationMaster,其中,客户端负责向ResourceManager提交ApplicationMaster,并查询应用程序运行状态,ApplicationMaster负责向ResourceManager申请资源(以Container形式表示),并与NodeManager通信以启动各个Container,此外,ApplicationMaster还负责监控各个任务运行状态,并在失败是为其重新申请资源。

2. YARN Appcalition涉及到的RPC协议和主要编写步骤

  • (1) 涉及到的RPC协议
    通常而言,编写一个YARN Appcalition涉及到3个RPC协议,分别为:

    • ClientRMProtocol(Client<–>ResourceManager)
      Client通过该协议将应用程序提交到ResourceManager上、查询应用程序的运行状态或者杀死应用程序等。
    • AMRMProtocol(ApplicationMaster<–>ResourceManager)
      ApplicationMaster使用该协议向ResourceManager注册、申请资源以运行自己的各个任务。
    • ContainerManager(ApplicationMaster<–> NodeManager)
      ApplicationMaster使用该协议要求NodeManager启动/撤销Container,或者获取各个container的运行状态。
  • (2) 客户端编写流程

    • 步骤1 Client通过RPC函数ClientRMProtocol#getNewApplication从ResourceManager中获取唯一的 application ID
    • 步骤2 Client通过RPC函数ClientRMProtocol#submitApplication将ApplicationMaster提交到ResourceManager上。
  • (3) ApplicationMaster编写流程

    • 步骤1 ApplicationMaster通过RPC函数AMRMProtocol#registerApplicationMaster向ResourceManager注册。

    • 步骤2 ApplicationMaster通过RPC函数AMRMProtocol#allocate向ResourceManager申请资源(以Container形式表示)。

    • 步骤3 ApplicationMaster通过RPC函数ContainerManager#startContainer要求对应的NodeManager启动Container。

      ApplicationMaster重复步骤2~3,直到所有任务运行成功。

另外,在应用程序运行过程中,用户可使用ClientRMProtocol#getApplicationReport 查询应用程序运行状态,也可以使用ClientRMProtocol#forceKillApplication将应用程序杀死。

3. 编写YARN Appcalition详细步骤介绍

(1)客户端编写流程
客户端通常只需与ResourceManager交互,期间涉及到多个数据结构和一个RPC协议,具体如下:

  • 步骤1 获取ApplicationId。客户端通过RPC协议ClientRMProtocol向ResourceManager发送应用程序提交请求GetNewApplicationRequest,ResourceManager为其返回应答GetNewApplicationResponse,该数据结构中包含多种信息,包括ApplicationId、可资源使用上限和下限等。
  • 步骤2 提交ApplicationMaster。将启动ApplicationMaster所需的所有信息打包到数据结构ApplicationSubmissionContext中,主要包括以下几种信息:
application_id:application id
application 名称
application优先级
application 所属队列
application 启动用户名

ApplicationMaster对应的Container信息,包括:启动ApplicationMaster所需各种文件资源、jar包、环境变量、启动命令、运行ApplicationMaster所需的资源(主要指内存)等。
客户端调用ClientRMProtocol#submitApplication(ApplicationSubmissionContext)将ApplicationMaster提交到ResourceManager上。

(ResourceManager收到请求后,会为ApplicationMaster寻找合适的节点,并在该节点上启动它)。

客户端可通过多种方式查询应用程序的运行状态,其中一种是调用RPC函数ClientRMProtocol#getApplicationReport获取一个应用程序当前运行状况报告,该报告内容包括应用程序名称、所属用户、所在队列、ApplicationMaster所在节点、一些诊断信息、启动时间等。

(2)编写ApplicationMaster

ApplicationMaster需要与ResoureManager和NodeManager交互,以申请资源和启动Container,期间涉及到多个数据结构和两个RPC协议。具体步骤如下:

  • 步骤1 注册。ApplicationMaster首先需通过RPC协议AMRMProtocol向ResourceManager发送注册请求RegisterApplicationMasterRequest,该数据结构中包含ApplicationMaster所在节点的host、RPC port和TrackingUrl等信息,而ResourceManager将返回RegisterApplicationMasterResponse,该数据结构中包含多种信息,包括该应用程序的ACL列表、可资源使用上限和下限等。

  • 步骤2 申请资源。根据每个任务的资源需求,ApplicationMaster可向ResourceManager申请一系列用于运行任务的Container,ApplicationMaster使用ResourceRequest类描述每个Container(一个container只能运行一个任务):

    1)    Hostname        期望Container所在的节点,如果是“*”,表示可以为任意节点。
    2)    Resource capability          运行该任务所需的资源量,当前仅支持内存资源。
    3)    Priority     任务优先级。一个应用程序中的任务可能有多种优先级,ResourceManager会优先为高优先级的任务分配资源
    4)    numContainers        符合以上条件的container数目。
    

    一旦为任务构造了Container后,ApplicationMaster会使用RPC函数AMRMProtocol#allocate向ResourceManager发送一个AllocateRequest对象,以请求分配这些Container,AllocateRequest中包含以下信息:

    1)Requested containers      所需的Container列表
    2)Released containers        有些情况下,比如有些任务在某些节点上失败过,则ApplicationMaster不想再在这些节点上运行任务,此时可要求释放这些节点上的Container。
    3)Progress update information      应用程序执行进度
    4)ResponseId                RPC响应ID,每次调用RPC,该值会加1。
    

    ResourceManager会为ApplicationMaster返回一个AllocateResponse对象,该对象中主要信息包含在AMResponse中:

    1)reboot                   ApplicationMaster是否需要重新初始化.当ResourceManager端出现不一致状态时,会要求对应的ApplicationMaster重新初始化。
    2)Allocated Containers  新分配的container列表。
    3)Completed Containers        已运行完成的container列表,该列表中包含运行成功和未成功的Container,ApplicationMaster可能需要重新运行那些未运行成功的Container。
    

    ApplicationMaster会不断追踪已经获取的container,且只有当需求发生变化时,才允许重新为Container申请资源。

  • 步骤3 启动Container。当ApplicationMaster(从ResourceManager端)收到新分配的Container列表后,会使用RPC函数ContainerManager#startContainer向对应的NodeManager发送ContainerLaunchContext以启动Container,ContainerLaunchContext包含以下内容:

    1)ContainerId                   Container id
    2)Resource     该Container可使用的资源量(当前仅支持内存)
    3)User    Container所属用户
    4)Security tokens   安全令牌,只有持有该令牌才可启动container
    5)LocalResource    运行Container所需的本地资源,比如jar包、二进制文件、其他外部文件等。
    6)ServiceData         应用程序可能使用其他外部服务,这些服务相关的数据通过该参数指定。
    7)Environment        启动container所需的环境变量
    8)command    启动container的命令
    

    ApplicationMaster会不断重复步骤2~3,直到所有任务运行成功,此时,它会调用AMRMProtocol#finishApplicationMaster,以告诉ResourceManage自己运行结束。

【注意】 整个运行过程中,ApplicationMaster需通过心跳与ResourceManager保持联系,这是因为,如果一段时间内(默认是10min),ResourceManager未收到ApplicationMaster信息,则认为它死掉了,会重新调度或者让其失败。通常而言,ApplicationMaster周期性调用RPC函数AMRMProtocol#allocate向其发送空的AllocateRequest请求即可。

4. 总结

编写一个兼具高容错性和高性能的ApplicationMaster是非常不容易的,在后面几篇博文中,我将介绍YARN中提供的两个ApplicationMaster实现,一个是非常简单,通常用作示例的dsitributedshell,另一个是MapReduce计算框架对应的ApplicationMaster—MRAppMaster。

【深入浅出 Yarn 架构与实现】3-1 Yarn Application 流程与编写方法 本篇学习 Yarn Application 编写方法,将带你更清楚的了解一个任务是如何提交到 Yarn ,在运行中的交互和任务停止的过程。通过了解整个任务的运行流程,帮你更好的理解 Yarn 运作方式,出现问题时能更好的定位。 阅读详情

相关推荐

10、从MRv1迁移到MRv2及编写YARN应用指南

本文详细介绍了从MapReduce v1 (MRv1) 迁移到MapReduce v2 (MRv2/YARN) 的过程,涵盖二进制和源代码的兼容性、在YARN上运行及监控MRv1应用程序的方法。同时深入讲解了如何编写自己的YARN应用程序,包括YARN API、通信协议、客户端API的使用,以及完整的Java示例代码和开发步骤,帮助开发者顺利过渡到YARN框架并开发高效分布式应用。

t8u9v0w1x的博客 76

如何编写YARN应用程序

1. 概述 YARN是一个资源管理系统,负责集群资源的管理和分配。如果想要将一个新的应用程序运行在YARN之上,通常需要编写两个组件:客户端和ApplicationMaster。由于这两个组件编写非常复杂,尤其ApplicationMaster,需要考虑RPC调用、任务容错等细节,所以,往往由专业的开发人员编写这两个组件,并提供给上层的应用程序用户使用。如果大量应用程序可抽象成一种通用框架,那么...

caodaoxi的专栏 333

11、编写自定义 YARN 应用程序及深入了解 YARN 组件

本文详细介绍了如何编写自定义的 Hadoop YARN 应用程序,包括定义 YARN 客户端、设置 ApplicationMaster、导出项目资源以及提交应用程序的完整流程。同时深入解析了 YARN 的核心组件,特别是 ResourceManager 和 NodeManager 的功能与工作流程,帮助读者全面理解 YARN 的架构和开发实践。

t8u9v0w1x的博客 71

hadoop 0.23 YARN分布式程序的编写 (Hadoop MapReduce Next Generation - Writing YARN Applications)

原文:http://hadoop.apache.org/common/docs/r0.23.0/hadoop-yarn/hadoop-yarn-site/WritingYarnApplications.html 目的     这个文档从比较高的层面上描述了如何编写一个YARN应用 概念和流程     首先说的概念是“Application Submission Client”他负责将“Ap

bertzhang的专栏 4156

43、编写 YARN 应用程序全解析

本文深入解析了编写 YARN 应用程序的关键知识点,包括本地化和日志目录的保留机制、使用非托管 ApplicationMaster 进行调试的方法,以及 YARN 应用程序的高级功能如组件间通信、服务发现、检查点机制和长时间运行的支持。同时介绍了基于 YARN 的高级抽象层如 Apache Twill、Spring for Hadoop 和 REEF,帮助开发者更高效地构建复杂的应用程序。

sam99的博客 98

第四章 自定义组件、动画

第三章 自定义组件、动画 (一)自定义View 1.1) onMeasure:对当前View的尺寸进行测量 protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) widthMeasureSpec和heightMeasureSpec包含测量模式和尺寸大小 int widthMode = MeasureSpec....

Stay Hungry Stay Foolish 求知若饥 虚心若愚 8130

编写yarn应用

目的: 本文在high level中描述了在YARN中实现应用的方法。 理念和流程 大概的理念是,应用提交client提交一项应用给yarn的Resource Manager。这可以通过建立一个yarn client来实现。yarnclient启动之后,client会建立应用,准备包含application  master的container的应用,然后提交应用。你需

yuangeqingtian的专栏 943

无需云服务器:飞牛云NAS+Docker搭建本地WordPress站点全球访问

在数字化浪潮中,网站搭建已成为个人和企业在推广自身品牌与业务的首要选择。飞牛云新推出的fnOS,这款集多功能于一身的nas系统,以其卓越的性能和灵活性,成为理想的本地网站部署平台。本文将带你一探如何在飞牛云NAS上通过Docker部署WordPress,并利用cpolar实现全球访问。

LT15171009269的博客 6528

Hadoop3.2.0 编写YARN应用程序

目的 概念和流程 接口 编写一个简单的YARN应用程序 写一个简单的客户端 编写ApplicationMaster(AM) 常问问题 如何将应用程序的jar分发给需要它的YARN集群中的所有节点? 我如何获得ApplicationMaster的ApplicationAttemptId? 为什么我的容器被NodeManager杀死了? 如何包含本机库? 有用的链...

张伯毅的专栏 3937

ICM42670 IIC驱动与卡尔曼+四元数姿态解算实战

惯性测量单元(IMU)是运动控制、无人机飞控和AR/VR设备的核心传感器,其数据质量直接取决于底层硬件通信可靠性与姿态估计算法鲁棒性。IIC(I²C)作为嵌入式系统中最常用的低速串行总线,需满足确定性时序、抗干扰与实时采样要求;卡尔曼滤波则通过状态建模与噪声协方差优化,在动态环境中融合加速度计与陀螺仪数据;而四元数因其无万向锁、插值平滑、旋转合成高效等优势,成为高精度姿态解算的数学基础。本文以高性能六轴IMU ICM42670为载体,深入剖析IIC硬件设计要点、裸机级驱动优化、Allan方差驱动的卡尔曼参数

weixin_27076351的博客 252

史上最全工商银行核心系统建设历程:从“数据集中”到“ECOS”2.0,见证银行业信息科技跨时代发展征程

ECOS工程的直接成果是建成了工商银行第五代信息系统,即从单一核心银行系统到去核心化开放生态系统,率先开启了以智能化、开放化为特征,数据驱动引领经营模式变革,创新提出了一整套国际领先的分布式开放生态银行系统建设方案,在大型银行全分布式系统架构、主机下移、银行系统生态化转型、大规模交易型分布式数据库等多个领域再次实现“0到1”的突破,建成了具备国际领先水平的全分布式开放生态银行系统,继续勇立数字化转型潮头,推动高质量发展再上新台阶。工商银行的业务连续性管理水平实现了跨越式发展,有力地保障了业务发展。

银行信息系统应用架构详解 824

Hadoop YARN的发展史与详细解析

带有 MapReduce 的 Apache Hadoop 是分布式数据处理的骨干力量。借助其独特的横向扩展物理集群架构和由 Google 最初开发的精细处理框架,Hadoop 在大数据处理的全新领域迎来了爆炸式增长。Hadoop 还开发了一个丰富多样的应用程序生态系统,包括 Apache Pig(一种强大的脚本语言)和 Apache Hive(一个具有类似 SQL 界面的数据仓库解决方案)。

Lee的博客 1591

物联网Node-Red开发教程-第6章 HTTP与Web服务

本章摘要(147字): 本章系统讲解了Node-RED中的HTTP节点应用,重点包括: 三大核心HTTP节点功能:http in(接收请求)、http response(返回响应)、http request(调用外部API) 详细演示了REST API开发流程,包括路径参数(req.params)处理和响应构造 提供了创建Hello World API、传感器数据接口等实用示例 涵盖HTTP方法特性、状态码设置及响应头配置等关键知识点 通过流程图和JSON配置直观展示节点连接方式,帮助快速掌握Web服务开发

shihui2003的博客 264

Drill-on-YARN之部署

1. 概要 Drill是Apache旗下的一个开源SQL查询引擎,可用于探索大数据。它的设计初衷是为了支持对大数据的高性能分析,同时支持行业标准查询语言ANSI SQL。 在Drill 1.13之前,Drill只支持独立集群部署,部署成功后每个节点上会运行一个名为Dirllbit的守护进程。从1.13版本开始,Drill支持与YARN集成来管理资源。使用...

weixin_34074740的博客 176

JavaFX 表视图

我们可以使用来自 JavaFX API 的 TableView,TableColumn 和 TableCell 类以表格形式表示数据。通过实现数据模型和应用单元工厂来填充表中的数据。表类可以按列排序数据,并在必要时调整列大小。

2012年开始工作,全栈开发老兵,目前已是一个老师,分享这么多年的心得体会 404

ADS1115 0-10V高精度ADC模块原理图设计,已量产

在水质监测、智能气象站、环境感知等领域,0-10V 电压输出的传感器占据了重要地位。这类传感器输出信号稳定、抗干扰能力强,但对数据采集模块的精度、线性度和易用性提出了严苛要求。本文将深度解析一款专为 0-10V 传感器设计的高精度 ADC 模块,从硬件架构、性能指标到工程化实践,全面呈现其设计思路与核心价值。

不脱发的程序猿 272

YARN

1. 什么是YARN Yet Another Resource Negotiator(另一种资源协调者),是一种新的Hadoop资源管理器,它是一个通用资源管理系统,可为上层应用提供统一的资源管理和调度。 2. YARN架构 ResurceManager(RM):一个纯粹的调度器,专门负责集群中可用资源的分配和管理。 Container :分配给具体应用的资源抽象表现形式...

xujieyang4j的博客 244

YOLO26-seg分割优化:轻量化卷积魔改 | 新的partial convolution(PConv)结合C3k2 | CVPR2023

​​​​​摘要:本研究对Ultralytics YOLO26进行了全面分析,重点阐述了其关键架构改进及其在实时边缘目标检测中的性能基准测试。YOLO26于2025年9月发布,是YOLO系列最新、最先进的成员,专为在边缘及低功耗设备上实现高效、精确且易于部署的目标而构建。本文依次详述了YOLO26的架构创新,包括:移除了分布焦点损失(DFL);采用端到端的无NMS推理;集成了渐进损失(ProgLoss)与小目标感知标签分配(STAL);以及引入了用于稳定收敛的MuSGD优化器。

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 149

PySpark Yarn集群模式

随着大数据的普及,Spark作为主流的分布式计算框架,在大数据处理中扮演着重要角色。YARN(Yet Another Resource Negotiator)作为资源调度和管理框架,与Spark结合后可以更好地管理和调度资源。本篇文章将详细介绍如何在YARN集群模式下运行PySpark应用程序,适合有一定Spark基础的开发者。PySpark是Spark的Python API,支持使用Python编写代码并提交到Spark集群运行。

m0_70691645的博客 1744

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

Spark on YARN

前言 Spark 可以跑在很多集群上,比如跑在local上,跑在Standalone上,跑在Apache Mesos上,跑在Hadoop YARN上等等。不管你Spark跑在什么上面,它的代码都是一样的,区别只是–master的时候不一样。其中Spark on YARN是工作中或生产上用的非常多的一种运行模式。 YARN产生背景 以前没有YARN的时候,每个分布式框架都要跑在一个集群上面,比如说H...

liweihope的博客 2万+

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

上一篇: ZKFC原理解析
下一篇: java工程打包通用篇
王小禾
博客等级 码龄11年 80粉丝 291原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值