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. Nosql简介 Redis,Memchche,MongoDb的区别

    本篇文章主要介绍Nosql的一些东西,以及Nosql中比较火的三个数据库Redis.Memchache.MongoDb和他们之间的区别.以下是本文章的阅读目录 一.Nosql介绍 1.Nosql简介 ...

  2. Xshell显示图形化界面

    前言 很久没用过图形化界面了,都忘记怎么使用了.... 依据以往的经验都是由环境变量DISPLAY设置,然后就能连接了,每天也是匆匆忙忙的就过了一天,都不知道干了啥,分配的时间也少,但是一直纠结,进行 ...

  3. 一个for循环打印二维数组

    #include<stdio.h> #define MAXX 2 #define MAXY 3 void printarray() { ,,,,,}; ;i< MAXX*MAXY;i ...

  4. TFS2017持续发布中调用PowerShell启停远程应用程序

    目前团队项目中有多个Web.服务以及与大数据平台对接接口等应用,每次的发布和部署采用手工的方式进行.停止应用程序,拷贝发布包,启动应用程序,不停的循环着,并且时不时地会出现一些人为错误性问题.这种模式 ...

  5. Python的Web应用框架--Django

    一:简介 python的web框架有很多,个人查了一下,有Django.Pylons. Tornado.Bottle和Flask等,其中使用人数最多的是Django,而我学习Django也是因为ope ...

  6. mac ox下android 通过battery-historian进行电量分析

    简单介绍下如何用battery-historian进行电量分析,因为battery-hostorian是基于go语言的框架,所以需要安装go 1.安装go 2.配置go环境变量到.bash_profi ...

  7. node.js之fs模块

    一.fs模块的mkdir函数,创建文件夹 var http = require("http"); var fs = require("fs"); var ser ...

  8. .NET Core快速入门教程 2、我的第一个.NET Core App(Windows篇)

    一.前言 本篇开发环境?1.操作系统: Windows 10 X642.SDK: .NET Core 2.0 Preview 二.安装 .NET Core SDK 1.下载 .NET Core下载地址 ...

  9. PHP中的会话控制

    了解HTTP(超文本传输协议)可以知道,它采用请求与响应的模式,最大的特点就是无连接无状态. 无连接:每次连接仅处理一个客户端的请求,得到服务器响应后,连接就结束了 无状态:每个请求都是独立的,服务器 ...

  10. 从durable谈起,我是如何用搜索引擎抓住技术的关键字学习新姿势打开敏捷开发的大门

    ---又名我讨厌伸手党 我又把个人博客的子标题改为了 你可以在书和搜索引擎找到90%的问题的答案,为什么要问别人?剩下的10%或许没有答案,为什么要问别人? 这是由于最近在网上看到各种伸手,对于我这种 ...