建议使用以下浏览器,以获得最佳体验。 IE 9.0+以上版本 Chrome 31+ 谷歌浏览器 Firefox 30+ 火狐浏览器
请选择 进入手机版 | 继续访问电脑版
设置昵称

在此一键设置昵称,即可参与社区互动!

确定
我再想想
选择版块
直达楼层
标签
您还可以添加5个标签
  • 没有搜索到和“关键字”相关的标签
  • 云产品
  • 解决方案
  • 技术领域
  • 通用技术
  • 平台功能
取消

采纳成功

您已采纳当前回复为最佳回复

建赟

发帖: 669粉丝: 50

发消息 + 关注

发表于2019年01月24日 14:32:45 6650 4
直达本楼层的链接
楼主
显示全部楼层
[技术干货] 聪明的Yarn(上集)

作者叶子是一位90后,天秤座,大数据&人工智能美女讲师。钟情创作,相信一切感受皆是生命的体验,坚持在朴素的文字中寻找生活的出路。是一位集才气于一身的大美女。

  【技术分享】

在《解秘MapReduce》系列文章中,我向大家介绍了MapReduce巧妙的运算过程。

MapReduce作为一个面向海量数据分布式处理的计算模型、框架和平台,具备以下三个特点:

1、易于编程:程序员仅需描述Map阶段和Reduce阶段要如何解析、处理数据,具体怎么读取数据并对处理结果进行排序、分区、组合、合并等等,都可以交由系统的执行框架处理。

2、良好的扩展性:可通过添加节点以扩展集群运算能力。

3、高容错性:在程序运行过程中,当某些节点发生故障时,通过计算迁移或数据迁移等策略在其他节点继续执行受影响的任务,提高集群的可用性与容错性。


那么问题来了,MapReduce到底是如何提交任务到集群执行的呢?集群资源如何获取?任务如何分配?由谁监控执行?


这一连串的问题我们将在这篇文章中为大家解决。


image.png


上图展示的便是MapReduce v1(即Hadoop1.0)的任务运行原理。


其中MapReduce Program是编辑好的应用程序,由客户端进程JobClient提交给集群中的老大JobTracker。

JobTracker负责集群资源管理和任务调度,它会解析应用程序,然后调动各个小弟TaskTracker分工合作,为应用程序提供运行资源并分布式实施数据处理作业。在小弟干活的过程中,老大负责监控和故障处理。


详细说明如下(参照上图):

1、程序员编写好MapReduce Program作业,也就是JAVA程序,然后由客户端进行提交;

2、客户端JobClientJobTracker申请一个作业ID,加入集群任务列表中;

3、客户端JobClient把作业源代码以及相关的依赖文件存储到HDFS的系统指定目录下

4、客户端JobClient正式向JobTracker提交作业;

5、JobTracker初始化作业,比如计算资源需求等;

6、JobTracker通过HDFS clientNameNode(管理文件系统元数据的角色,它知道每个文件的分布情况)询问程序需要处理的输入文件分布在哪些节点,并得到这些索引;

7、JobTracker通过和TaskTracker每分钟一次的心跳联系来获知哪些节点可以运行任务(作业将拆分成许多任务给各个小弟执行,集群中每个数据节点都部署一个小弟角色),比如死机或者没有剩余资源的节点就不再执行新任务;

8、JobTracker将任务分配给上一步中的TaskTracker,这些TaskTracker通过访问HDFS来获取任务代码;

9、执行任务的TaskTracker在本节点上启动虚拟机(JVM)来执行任务;

10、在各个JVM中执行任务,该过程受JobTracker监视。如果任务运行失败则由JobTracker通知相应的TaskTracker重启任务,直到全部Map任务和Reduce任务都运行完成。


这个过程看似妥当,其实有个致命的问题:集群老大JobTracter工作量太大。

老大平时需要管理众多小弟不说,当接收到任务执行申请时既要充当整个集群的资源调度者、任务分发者,又要负责各个任务的状态监控以及重启失败任务,工作相当繁忙。


在MapReduce V1中JobTracter只部署在一个节点上,没有备用或者分担工作的进程,所以整个集群存在性能瓶颈和单点故障问题,扩展性也受到受限。

另外,该机制不支持非MapReduce类型的任务提交集群运行,在大数据处理环境中,这也是极不友好的。


正是在这样的背景下催生了Yarn——Hadoop2.0的资源管理系统。Yarn是一个通用的资源管理系统,可为上层应用(包括且不限于MapReduce)提供统一的资源管理和调度,它的出现解决了以上所有的问题。


image.png


如上图所示,Yarn主要包括Resource ManagerNode ManagerApplication Master(即App Mstr)三个部分。


Resource Manager(简称RM)集群老大,是一个全局的资源管理器,负责集群资源统一管理调度和应用程序管理。它包括两个组成部分:Resource Scheduler(资源调度器Applications Manager(应用程序管理器

资源调度器Resource Scheduler(简称RS)负责将集群中的资源分配给各个应用程序。资源用一个抽象概念Container表示,它封装了节点上的多维度资源,如内存、CPU、磁盘、网络等(目前只实现内存、CPU);

应用程序管理器Applications Manager(简称ASM)负责管理整个系统中的所有应用程序。主要负责接收来自Client的应用程序提交申请,与资源调度器Resource Scheduler协商资源情况,启动并监控AppMaster(下文有解释)运行,在AppMaster运行失败时重启它。


Node Manager(简称NM)即集群小弟,每个数据节点都部署有该角色,用以管理本节点资源(CPU、内存)。一方面它会定期向老大汇报本节点的资源使用情况和各个Container的运行状态;另一方面,它接收并处理来自AppMasterContainer启动/停止等各种请求。


Application Master(简称AppMaster、App Mstr、AM依赖于各种计算框架的实现(例如MR AppMaster),负责一个Job生命周期内的所有管理工作,相当于老大麾下的项目负责人。


image.png


Yarn具体工作流程如下(参照上图):

步骤1:Yarn的客户端Client向RM中的ASM申请Job IDRM审核该申请的合法性,审核通过后创建一个Job ID返回给客户端;Client把作业源代码以及相关的依赖文件存储到HDFS的系统指定目录下Client正式ASM提交作业, 其中包括AM程序、启动AM的命令以及用户程序等。

步骤2:ASM接收客户端的作业请求后为该作业分配第一个Container。并由对应的Node Manager在这个Container中启动AM程序,用来管理当前的Job。

步骤3:AM启动后ASM注册,ASM接收AM注册信息,并将集群资源信息、作业源代码的位置信息等反馈给AM。

步骤4:AMHDFS获取作业程序和相关的依赖文件,了解任务详细情况,确定执行作业需要多少资源,并RS发出资源申请(该步骤可能无法一次性完成整个作业的资源申请,允许多次申请)。RM根据集群资源情况AM分配资源,并将资源位置和数量信息发给AM

步骤5:AM申请到资源后,便与对应的Node Manager通信,要求它拿出Container来启动JVM。

步骤6:Node Manager为任务设置好运行环境(包括环境变量、JAR 包、二进制程序等),将进程启动命令写到一个脚本中,并通过运行该脚本启动JVM。

步骤7:各个JVM启动后首先向AM注册,AM为其分配任务。JVM访问HDFS获取具体任务程序并执行;任务运行过程中,AM可以通过NM询问各个任务的运行状态和进度,从而可以在任务运行失败时对其进行重启;客户端Client可随时向AM查询作业的运行状态和进度。

步骤8当前Job中的全部任务运行完成后,相应的Container也被回收或应用到其他计算任务中。AM向ASM汇报作业执行结束,ASM注销AM,整个作业执行完成


在以上的资源调度和任务分配过程中可以看出Yarn的工作机制相比MapReduce V1聪明了很多:



1、老大在管理各个Job方面的压力全部下放给了各个AppMaster,完美地解决了单点性能瓶颈问题。


2、在Yarn中,Resource Manager支持主备模式部署。也就是可以在集群中的两个节点上都部署该角色,同一时刻只有一个在工作,当正在工作的RM故障时,立马由另一个来接替工作,完美地解决了单点故障问题。


3、Yarn除了可以支持MapReduce的作业,还可以支持其他计算框架,如Spark、Storm等。


如此一来,可以说是相当nice了!


好啦,今天的分享到这里先告一段落,大家都学会了吗?


如有疑问,欢迎给我留言哦。大家也可以在本订阅号“个人中心”一栏选择“叶子微信”,备注为”浅浅时光读者“,我准备建立一个读者群,为大家答疑解惑!


在《聪明的Yarn(下集)》中我会为大家揭晓 集群中多作业并发时Yarn如何公平妥善分配资源 的秘密~


敬请期待!


image.png


举报
分享

分享文章到朋友圈

分享文章到微博

采纳成功

您已采纳当前回复为最佳回复

建赟

发帖: 669粉丝: 50

发消息 + 关注

发表于2019年01月24日 14:33:19
直达本楼层的链接
沙发
显示全部楼层

技术好文章,值得推荐

点赞 评论 引用 举报

采纳成功

您已采纳当前回复为最佳回复

极客潇

发帖: 520粉丝: 69

发消息 + 关注

发表于2019年01月30日 14:51:03
直达本楼层的链接
板凳
显示全部楼层

感谢推荐,文章字体看起来比较累,再调节下更好

点赞 评论 引用 举报

采纳成功

您已采纳当前回复为最佳回复

Joey啊

发帖: 84粉丝: 16

级别 : 版主

发消息 + 关注

发表于2019年08月30日 11:42:14
直达本楼层的链接
地板
显示全部楼层

点赞 评论 引用 举报

采纳成功

您已采纳当前回复为最佳回复

Joey啊

发帖: 84粉丝: 16

级别 : 版主

发消息 + 关注

发表于2019年08月30日 11:42:21
直达本楼层的链接
5#
显示全部楼层

点赞 评论 引用 举报

游客

富文本
Markdown
您需要登录后才可以回帖 登录 | 立即注册

结贴

您对问题的回复是否满意?
满意度
非常满意 满意 一般 不满意
我要反馈
0/200