1.YARN是什么
YARN  (Yet Another Resource Negotiator,另一种资源协调者) 是hadoop上的一种资源调度器,它是一个通用资源管理系统,可以为上层应用提供统一的资源管理和调度.
 
2.yarn的结构

 
YARN的结构是一个典型的主从结构(MASTER/SLAVER)
其中的ResourceManager(简称为RM),是一个全局的资源调度器,负责整个系统的资源管理和分配.
然后NodeManager(简称为NM),则是每个节点上的资源和任务管理器,他有两个作用,首先NM会定时的向RM汇报该节点的资源使用情况和每个Container的运行状态,然后NM还会接收并处理来自AM的要求停止和启动指定container等各种请求.
 
 
3.如何编写基于yarn的程序
编写一个运行于yarn上的应用程序,主要需要编写两个组件,YARNClient和ApplicationMaster(简称AM).
 
1. YARNClient 运行在用户端,为用户和YARN集群上的应用交互提供了一系列的接口.主要作用包括创建应用(Application),申请用于运行AM的Container并提交AM到这个Container进行运行.如果有必要的话,还以通过该YARNClient获取 AM 在 YARN集群的运行状态.
2.AM是一个独立的进程,是每个用户应用的主进程,作用是协调运行在YARN集群中的应用程序的执行状况,主要包括 和RM协商资源,并且配合NM一起工作来启动并跟踪Container的运行情况,并根据运行情况对用户程序作出对应的调整.
 
假如我们要在YARN集群上运行一个简单的java程序(输出一句 hello world),那么程序结构一般如下图所示.
 

 
如上图所示, 其中:
1. AM.jar 表示 应用的 Application Master 的jar包
2.HelloWorld.jar 表示包含输出的 HelloWorld 的类的jar包,这个jar包里面实际上是一个HelloWorld类,核心内容就是一个主函数,运行后输出一句Hello World
3.在应用提交运行前,我们事先将 AM.jar 和 HelloWorld.jar 上传到 HDFS 存储,用来方便之后来使用.
4.YARNClient 提供了用户和YARN集群进行交互的接口,实际上 YARNClient 并不能算作YARN集群中一个独立的模块,只是提供个类 YarnClient,用户可以在自己的应用中调用 YarnClient 类来和YARN集群进行交互.
5.Container(AM) 表示YARN集群上用来运行 AM的进程(作为YARN集群中的一个抽象概念-container)
6.Container(HelloWorld) 表示YARN集群上真正运行的用户程序(我们用HelloWorld来表示一个普通的用户程序)的进程,其中Container(HelloWorld) 和 Container(AM) 可能在同一个NM进程下,也可能分配给不同的NM,这主要决定于RM的分配策略.
 
 
用户提交一个基于yarn的应用程序,也就是YarnClient 运行流程如下:
 
1.用户事先要将使用的 AM.jar 和 HelloWorld.jar 打包上传到hdfs
2.用户在客户端实例化 YarnConfiguration对象
3. 初始化并运行YarnClient
4.为了新的应用程序 得到一个 YarnClientApplication 对象
5.获取提交应用的上下文对象,并且可以使用这个上下文对象设置AM的一些运行情况
6.获取 新应用在YARN集群的唯一标识
7.设置应用的名字,这个名字会在yarn的web页面体现出来
8.设置该应用对应的AM的jar为 LocalResource,以供 AM Container启动时获取.需要注意的是为了方便读取 am.jar 一般会存储在hdfs上
其中:
设置资源类型为file,这样这个文件会在不会被解压的情况下直接复制到 container的对应目录
设置资源的可见性为LocalResourceVisibility.APPLICATION,表示只有这个应用可以访问该资源,当应用运行停止后这个资源会被NM自动删除
9.将启动container需要的资源描述设置到对应的 container上下文中,以备后面使用

10 设置启动AM需要的环境变量,其中我们只配置了classPath,具体使用中可以根据实际情况设置其他的环境变量,例如JAVA_HOME,PATH等
11 设置启动AM的命令,我们这里就是设置了 用java命令启动 AM.jar的 包含主函数的类,并传入相关参数进行启动
12.设置 启动应用 的一些必要信息
13. 向YARN集群提交运行应用,提交的过程会阻塞,直到RM返回改应用的状态为ACCEPTED或者失败.
14,该步骤为可选项,即可以堵塞client端程序,直到应用运行结束或者异常退出等情况发生

到此为止,我们就初步完成了一个最简单的提交yarn应用程序的client示例代码
后面则是YARN集群接收到启动AM的请求后,为其分配 AM Container ,然后启动AM进程并运行.
我们会在后面的文章详细描述如何编写一个应用的AM程序,敬请期待.
 

如何在yarn上运行Hello World(一)的更多相关文章

  1. 如何在yarn上运行Hello World(二)

      在之前的一篇文章我们介绍了如何编写在yarn集群提交运行应用的AM的yarnClient端,现在我们来继续介绍如何编写在yarn集群控制应用app运行的核心模块 ApplicationMaster ...

  2. Spark源码编译并在YARN上运行WordCount实例

    在学习一门新语言时,想必我们都是"Hello World"程序开始,类似地,分布式计算框架的一个典型实例就是WordCount程序,接触过Hadoop的人肯定都知道用MapRedu ...

  3. Apache Spark源码走读之10 -- 在YARN上运行SparkPi

    y欢迎转载,转载请注明出处,徽沪一郎. 概要 “spark已经比较头痛了,还要将其运行在yarn上,yarn是什么,我一点概念都没有哎,再怎么办啊.不要跟我讲什么原理了,能不能直接告诉我怎么将spar ...

  4. 在Yarn上运行spark-shell和spark-sql命令行

    转载自:http://lxw1234.com/archives/2015/08/448.htm 如果你已经有一个正常运行的Hadoop Yarn环境,那么只需要下载相应版本的Spark,解压之后做为S ...

  5. Hadoop 系列文章(三) 配置部署启动YARN及在YARN上运行MapReduce程序

    这篇文章里我们将用配置 YARN,在 YARN 上运行 MapReduce. 1.修改 yarn-env.sh 环境变量里的 JAVA_HOME 路径 [bamboo@hadoop-senior ha ...

  6. Yarn上运行spark-1.6.0

    目录 目录 1 1. 约定 1 2. 安装Scala 1 2.1. 下载 2 2.2. 安装 2 2.3. 设置环境变量 2 3. 安装Spark 2 3.1. 下载 2 3.2. 安装 2 3.3. ...

  7. yarn上运行flink环境搭建

    主要完成hadoop集群搭建和yarn上运行flink 1.搭建hadoop伪集群 主要是搭建hadoop MapReduce(yarn)和HDFS 1.1 下载&配置环境变量 这里下载的ha ...

  8. Hadoop YARN上运行MapReduce程序

    (1)配置集群 (a)配置hadoop-2.7.2/etc/hadoop/yarn-env.sh 配置一下JAVA_HOME export JAVA_HOME=/home/hadoop/bigdata ...

  9. C#语言支持的特性,.NET却不支持,那么C#不被.NET支持的部分又是如何在.NET上运行的呢?

    阅读<C#高级编程>系列丛书中,介绍C#与.NET的关系,提到C#是语言,.NET是平台(C#不是.NET的一部分),说".NET支持的一些特性,C#并不支持",这个可 ...

随机推荐

  1. 罗培羽—C语言简单游戏编程教学

    编写许多软件都需要有菜单,那么如果我们使用tc之类的软件来编译程序的话,我们该怎么编写菜单呢?让我们一起来试试吧!第一步:简单例子       我们先来写个最简单的例子:#include<std ...

  2. JavaScript练习网站收集

    在学习的过程中会发现很多知识点如果不在工作中运用或者手写带验证的话,很容易忘记.任何技能的掌握都是需要不断练习的.在此收集一些自己遇到的JavaScript练习的网站. codewars 国外的一个练 ...

  3. django框架中的form组件的用法

    form组件的使用 先导入: from django.forms import Form from django.forms import fields from django.forms impor ...

  4. sql server 2008 r2 登陆时显示无法打开默认的数据库

    解决! 第一步: 远程其他服务器的数据库能连上,本地的数据库某个用户名就是打不开,一开始以为是用户名或者密码错误, 后来用sqlcmd dos命令 -S . -U an -P sa 的方式登陆时可以的 ...

  5. js脚本根据身份证号获取性别、年龄、家庭地址、生日

    做项目测试时需要根据身份证号获取其信息,也不想调接口,就自己在本地通过收集资料整合了一个

  6. mysql的explain

    explain 一般用于分析sql.  如下 [SQL] 纯文本查看 复制代码 ? 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 2 ...

  7. include、include_once、require、require_once其区别

    1.include: 载入文件.未找到文件,则产生E_WARNING 级别的警告错误,脚本继续运行. 2.include_once: 与include 语句作用相同,区别只是如果该文件已经被包含过,则 ...

  8. YiShop_最全微信营销涨粉技巧

    在我们开始推广企业订阅号之前,我们必须思考微信营销策略,客户通过微信可以获得什么?企业通过微信可以得到什么?微分销专家建议企业微信定位为互动.服务工具,因为获取一个粉丝很难,可是失去一个粉丝,却是一件 ...

  9. 通过Javascript调用微软认知服务情感检测接口的两种实现方式

    这是今天在黑客松现场写的代码.我们的项目需要调用认知服务的情感识别接口.官方提供了一种方式,就是从一个远程图片进行识别.我另外写了一个从本地文件读取并上传进行识别的例子. 官方文档,请参考 https ...

  10. 关于C#中函数声明带参数的函数

    在C#语言的函数中,有一项至关重要的我们称之为参数. 对于参数的含义:要完成一件事,需要知道的额外条件 其语法: static void 函数名(参数列表){ //注释类容} 而其参数列表的语法为: ...