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. Could not resolve view with name '***' in servlet with name 'dispatcher'

    今天在开发中遇到了一个问题,控制层使用的是SpringMVC框架. @RequestMapping("historyDetail") private String History( ...

  2. 简述Handler机制

    我会对android的消息处理有三个核心类逐步介绍,他们分别是:Looper,Handler和Message.其实还有一Message Queue(消息队列),知道它是队列即可,就像我们所熟知的数组, ...

  3. 自学python笔记(二)

    一:在Python的交互式命令行写程序,好处是一下就能得到结果,坏处是没法保存,下次还想运行的时候,还得再敲一遍.所以,实际开发的时候,我们总是使用一个文本编辑器来写代码,写完了,保存为一个文件,这样 ...

  4. springMVC+commons-fileupload上传文件大小限制异常

    异常信息: 严重: Servlet.service() for servlet [suibian] in context with path [/SpringMvcDemo3] threw excep ...

  5. 关于MVC Ajax.BeginForm()异步上传文件的问题

    问题描述: 如果用juqery原生的异步上传方式,只要如下方法即可 $.ajax({ type: "GET", url: "test.json", data: ...

  6. PHP求解一个值是否为质数

    /** * 求解一个值是否为质数 * * @param $a * @return int 0是 1不是 */ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 function ...

  7. 程序员的自我救赎---1.4.3: 核心框架讲解(MVC)

    <前言> (一) Winner2.0 框架基础分析 (二)PLSQL报表系统 (三)SSO单点登录 (四) 短信中心与消息中心 (五)钱包系统 (六)GPU支付中心 (七)权限系统 (八) ...

  8. sqlserver2005公布与订阅配置步骤

    1,新建公布 前提条件:第一要调通网络,在sqlserver configuration manager 中选择mssqlserver的协议把named pipes改为启用.第二要建立一个目录D:\b ...

  9. 学习vi和vim编辑器(5):越过基础的藩篱

    本章将对之前学习的编辑命令如" c "." d "." y "等命令进行总结,并学习一些新的知识:其它进入vi的方法,利用缓冲区来存储拖曳或 ...

  10. idea的快捷键

    idea的快捷键大全 Alt+回车 导入包,自动修正 Ctrl+N   查找类 Ctrl+Shift+N 查找文件 Ctrl+Alt+L  格式化代码 Ctrl+Alt+O 优化导入的类和包 Alt+ ...