转自:http://www.aboutyun.com/thread-7678-1-1.html

问题导读:
1、什么是yarn?
2、Yarn 和MapReduce相比,它有什么特殊作用 ?
背景
Yarn是一个分布式的资源管理系统,用以提高分布式的集群环境下的资源利用率,这些资源包括内存、IO、网络、磁盘等。其产生的原因是为了解决原MapReduce框架的不足。最初MapReduce的committer们还可以周期性的在已有的代码上进行修改,可是随着代码的增加以及原MapReduce框架设计的不足,在原MapReduce框架上进行修改变得越来越困难,所以MapReduce的committer们决定从架构上重新设计MapReduce,使下一代的MapReduce(MRv2/Yarn)框架具有更好的扩展性、可用性、可靠性、向后兼容性和更高的资源利用率以及能支持除了MapReduce计算框架外的更多的计算框架。
原MapReduce框架的不足
l  JobTracker是集群事务的集中处理点,存在单点故障
l  JobTracker需要完成的任务太多,既要维护job的状态又要维护job的task的状态,造成过多的资源消耗
l  在taskTracker端,用map/reduce task作为资源的表示过于简单,没有考虑到cpu、内存等资源情况,当把两个需要消耗大内存的task调度到一起,很容易出现OOM
l  把资源强制划分为map/reduce slot,当只有map task时,reduce slot不能用;当只有reduce task时,map slot不能用,容易造成资源利用不足。
 
Yarn架构
Yarn/MRv2最基本的想法是将原JobTracker主要的资源管理和job调度/监视功能分开作为两个单独的守护进程。有一个全局的ResourceManager(RM)和每个Application有一个ApplicationMaster(AM),Application相当于map-reduce job或者DAG jobs。ResourceManager和NodeManager(NM)组成了基本的数据计算框架。ResourceManager协调集群的资源利用,任何client或者运行着的applicatitonMaster想要运行job或者task都得向RM申请一定的资源。ApplicatonMaster是一个框架特殊的库,对于MapReduce框架而言有它自己的AM实现,用户也可以实现自己的AM,在运行的时候,AM会与NM一起来启动和监视tasks。
ResourceManager
ResourceManager作为资源的协调者有两个主要的组件:Scheduler和ApplicationsManager(AsM)。
Scheduler负责分配最少但满足application运行所需的资源量给Application。Scheduler只是基于资源的使用情况进行调度,并不负责监视/跟踪application的状态,当然也不会处理失败的task。RM使用resource container概念来管理集群的资源,resource container是资源的抽象,每个container包括一定的内存、IO、网络等资源,不过目前的实现只包括内存一种资源。
ApplicationsManager负责处理client提交的job以及协商第一个container以供applicationMaster运行,并且在applicationMaster失败的时候会重新启动applicationMaster。下面阐述RM具体完成的一些功能。
1、  资源调度
Scheduler从所有运行着的application收到资源请求后构建一个全局的资源分配计划,然后根据application特殊的限制以及全局的一些限制条件分配资源。
2、  资源监视
Scheduler会周期性的接收来自NM的资源使用率的监控信息,另外applicationMaster可以从Scheduler得到属于它的已完成的container的状态信息。
3、  application提交
l  client向AsM获得一个applicationID
l  client将application定义以及需要的jar包文件等上传到hdfs的指定目录,由yarn-site.xml的yarn.app.mapreduce.am.staging-dir指定
l  client构造资源请求的对象以及application的提交上下文发送给AsM
l  AsM接收application的提交上下文
l  AsM根据application的信息向Scheduler协商一个Container供applicationMaster运行,然后启动applicationMaster
l  向该container所属的NM发送launchContainer信息启动该container,也即启动applicationMaster
l  AsM向client提供运行着的AM的状态信息。
4、  AM的生命周期
AsM负责系统中所有AM的生命周期的管理。AsM负责AM的启动,当AM启动后,AM会周期性的向AsM发送heartbeat,默认是1s,AsM据此了解AM的存活情况,并且在AM失败时负责重启AM,若是一定时间过后(默认10分钟)没有收到AM的heartbeat,AsM就认为该AM失败了。
关于ResourceManager的可用性目前还没有很好的实现,不过Cloudera公司的CDH4.4以后的版本实现了一个简单的高可用性,使用了Hadoop-common项目中HA部分的代码,采用了类似hdfs namenode高可用性的设计,给RM引入了active和standby状态,不过没有与journalnode相对应的角色,只是由zookeeper来负责维护RM的状态,这样的设计只是一个最简单的方案,避免了手动重启RM,离真正的生产可用还有一段距离。
 
NodeManager
NM主要负责启动RM分配给AM的container以及代表AM的container,并且会监视container的运行情况。在启动container的时候,NM会设置一些必要的环境变量以及将container运行所需的jar包、文件等从hdfs下载到本地,也就是所谓的资源本地化;当所有准备工作做好后,才会启动代表该container的脚本将程序启动起来。启动起来后,NM会周期性的监视该container运行占用的资源情况,若是超过了该container所声明的资源量,则会kill掉该container所代表的进程。
另外,NM还提供了一个简单的服务以管理它所在机器的本地目录。Applications可以继续访问本地目录即使那台机器上已经没有了属于它的container在运行。例如,Map-Reduce应用程序使用这个服务存储map output并且shuffle它们给相应的reduce task。
在NM上还可以扩展自己的服务,yarn提供了一个yarn.nodemanager.aux-services的配置项,通过该配置,用户可以自定义一些服务,例如Map-Reduce的shuffle功能就是采用这种方式实现的。
NM在本地为每个运行着的application生成如下的目录结构:
Container目录下的目录结构如下:
在启动一个container的时候,NM就执行该container的default_container_executor.sh,该脚本内部会执行launch_container.sh。launch_container.sh会先设置一些环境变量,最后启动执行程序的命令。对于MapReduce而言,启动AM就执行org.apache.hadoop.mapreduce.v2.app.MRAppMaster;启动map/reduce task就执行org.apache.hadoop.mapred.YarnChild。
ApplicationMaster
ApplicationMaster是一个框架特殊的库,对于Map-Reduce计算模型而言有它自己的applicationMaster实现,对于其他的想要运行在yarn上的计算模型而言,必须得实现针对该计算模型的applicaitonMaster用以向RM申请资源运行task,比如运行在yarn上的spark框架也有对应的applicationMaster实现,归根结底,yarn是一个资源管理的框架,并不是一个计算框架,要想在yarn上运行应用程序,还得有特定的计算框架的实现。由于yarn是伴随着MRv2一起出现的,所以下面简要概述MRv2在yarn上的运行流程。
MRv2运行流程:
1、  MR JobClient向resourceManager(AsM)提交一个job
2、  AsM向Scheduler请求一个供MR AM运行的container,然后启动它
3、  MR AM启动起来后向AsM注册
4、  MR JobClient向AsM获取到MR AM相关的信息,然后直接与MR AM进行通信
5、  MR AM计算splits并为所有的map构造资源请求
6、  MR AM做一些必要的MR OutputCommitter的准备工作
7、  MR AM向RM(Scheduler)发起资源请求,得到一组供map/reduce task运行的container,然后与NM一起对每一个container执行一些必要的任务,包括
资源本地化等
8、  MR AM 监视运行着的task 直到完成,当task失败时,申请新的container运行失败的task
9、  当每个map/reduce task完成后,MR AM运行MR OutputCommitter的cleanup 代码,也就是进行一些收尾工作
10、当所有的map/reduce完成后,MR AM运行OutputCommitter的必要的job commit或者abort APIs
11、MR AM退出。
 
在Yarn上写应用程序     
在yarn上写应用程序并不同于我们熟知的MapReduce应用程序,必须牢记yarn只是一个资源管理的框架,并不是一个计算框架,计算框架可以运行在yarn上。我们所能做的就是向RM申请container,然后配合NM一起来启动container。就像MRv2一样,jobclient请求用于MR AM运行的container,设置环境变量和启动命令,然后交由NM去启动MR AM,随后map/reduce task就由MR AM全权负责,当然task的启动也是由MR AM向RM申请container,然后配合NM一起来启动的。所以要想在yarn上运行非特定计算框架的程序,我们就得实现自己的client和applicationMaster。另外我们自定义的AM需要放在各个NM的classpath下,因为AM可能运行在任何NM所在的机器上。

转载于:https://www.cnblogs.com/augustone/p/6275720.html

Yarn取代job/task tracker相关推荐

  1. Hadoop架构-YARN

    hadoop 1.x 架构 MRv1中各角色的作用: JobTracker: 核心,主,单点 调度所有的作业 监控整个集群的资源负载 TaskTracker: 从,自身节点资源管理 和JobTrack ...

  2. Alex 的 Hadoop 菜鸟教程: 第5课 YARN 安装以及helloworld (基于centos的CDH)

    原帖地址:http://blog.csdn.net/nsrainbow/article/details/36627675 新老MapReduce的比较 说到YARN肯定要先说下老的MapReduce ...

  3. spark on yarn yarn-client模式实现源码走读

    Spark版本2.4.0 在SparkContext的初始化过程中,将会根据配置的启动模式来选择不同的任务调度器TaskScheduler,而这个不同模式的实现也是在这里根据选择的TaskSchedu ...

  4. Task运行过程分析1

    1.Task运行过程概述 在MapReduce计算框架中,一个应用程序被划分成Map和Reduce两个计算阶段,它们分别由一个或者多个Map Task和Reduce Task组成.其中,每个Map T ...

  5. 大数据面试题 ---阿善有用

    大数据工程师面试题 1. 选择题 1.1. 下面哪个程序负责 HDFS 数据存储. a)NameNode  b)Jobtracker  c)Datanode d)secondaryNameNode e ...

  6. Hadoop期末试题复习题

    文章目录 单选 多选题 判断题 部分知识点 来源 预判老师的预判,考试了,复习用 单选 目前,Hadoop的最高版本是哪个? A.Hadoop3.x B.Hadoop2.x C.Hadoop4.x D ...

  7. Hadoop3.0基础平台搭建(三节点),以及案例运行并使用python生成词云

    一.设备配置列表,软件包 二.主机名映射 三.生成密钥 四.将密钥发送到各个节点 五.注意事项及验证 六.关闭防火墙和SeLinux安全模块(所有主机均需操作 七.解压JDK.hadoop包,设置Ja ...

  8. Hadoop-2.8.0集群搭建、hadoop源码编译和安装、host配置、ssh免密登录、hadoop配置文件中的参数配置参数总结、hadoop集群测试,安装过程中的常见错误

    25. 集群搭建 25.1 HADOOP集群搭建 25.1.1集群简介 HADOOP集群具体来说包含两个集群:HDFS集群和YARN集群,两者逻辑上分离,但物理上常在一起 HDFS集群: 负责海量数据 ...

  9. Hadoop, Hbase

    https://antkillerfarm.github.io/ Hadoop 最近(2016.4),参加公司组织的内部培训,对Hadoop有了一些认识,特记录如下. 概述 Hadoop项目由Doug ...

最新文章

  1. Nginx+Keepalived+Proxy_Cache 配置高可用集群和高速缓存
  2. 【重读iOS】网络请求2:应用
  3. bootstrap模态框 遮挡_Bootstrap Modal遮罩弹出层
  4. C++设计模式-Flyweight享元模式
  5. centos 截图命令 screenshot
  6. 【Java并发.3】对象的共享
  7. Windows API串口编程
  8. Linux socket程序演示
  9. 省市级联mysql数据_全国省市区县三级级联数据
  10. 计算机 A类会议论文,一篇论文被CCF A类会议SIGIR 2021录用!
  11. 银行系统总体架构\银行核心系统\常用金融名词解释
  12. 3991: [SDOI2015]寻宝游戏
  13. python进程已结束,退出代码 -1073740791 (0xC0000409)解决办法
  14. 25种让你精力充沛的方法
  15. SolidEdge 如何绘制断裂剖视图 局部剖视图
  16. h软件_Qt编写软件运行时间记录
  17. ​PDF文件怎么转换成JPG图片?分享两种简单的转换方法
  18. 简单总结几种思维模式---助你编程,思绪如飞
  19. 微信小程序 Page pages/Index/Index has not been registered yet.问题解决
  20. 手把手教你如何微信公众号开发“翻译功能

热门文章

  1. Tkinter的Checkbutton组件的简单使用
  2. 4 Redis的发布订阅
  3. 8-15主要复习 1.运算符优先级整体记忆 2.排序算法
  4. 未来计算机会有多发达,人工智能到底有多强?未来人工智能会主宰世界?
  5. 听说别人都在送小黄车月卡?神策数据送两个月!
  6. XML数据读取——Digester简单使用
  7. 慕课网Spark SQL日志分析 - 4.从Hive平滑过渡到Spark SQL
  8. linux每日命令(26):Linux文件属性详解
  9. NLP之CRF分词训练(六)
  10. 论文笔记之: Deep Metric Learning via Lifted Structured Feature Embedding