Hadoop Yarn学习笔记(1)

Yarn的基本角色概念

原生的Hadoop MapReduce过程存在几个问题:
1、JobTracker单节点同时管理资源、任务,负载高,导致集群节点存在上线,计算过程上下文切换成本高
2、资源的slot配置,Map/Reduce的资源配比固定导致资源浪费
3、代码比较负载,资源/任务一起管理
4、集群的可接入性差,因为JobTracker/TaskTracker已经做了MapReduce的定制
5、资源消耗多的task在一个节点导致OOM概率高

来自https://www.ibm.com/developerworks/cn/data/library/bd-yarn-intro/index.html
来自https://www.ibm.com/developerworks/cn/data/library/bd-yarn-intro/index.html
管理过多的task,且任务+资源一起节点,都通过TaskTracker
管理过多的task,且任务+资源一起节点,都通过TaskTracker
基本的角色分布以及部署视图上的调用关系,同时支持Spark和MRV2

在这里插入图片描述
ResourceManager只要有两个部分组成:
  - 应用程序管理器(ApplicationsManager, ASM): 管理和监控所有的应用程序的MRappmaster,启动应用程序的MRappmaster,以及MRappmaster失败重启
  - 调度器(Scheduler):底层是一个队列,负责应用程序的执行时间和顺序
     - FIFO(先进先出的队列):先提交的任务先执行 后提交的后执行 内部只维护一个队列
     - Fair 公平调度器:所有的计算任务进行资源的平分,全局中如果只有一个job那么当前的job占用所有的资源
     - Capacity(计算能力调度器):可以根据实际的job任务的大小,进行资源的配置

对比Yarn的机制,以上几个问题分过对应的方式得到解决:
1、JobTracker、TaskTracker演变为ResourceManager、NodeManager、ApplicationMaster,从层级为一的管理方式变成了层级为二的方式
2、资源抽象为GB(后来版本又增加了vcore、带宽等),因此资源可共享
3、ResourceManager只管理资源,NodeManager只管理本节点内资源,ApplicationMaster只管理任务
4、ResourceManager、NodeManager 和容器都不关心应用程序或任务的类型。所有特定于应用程序框架的代码都转移到它的 ApplicationMaster,以便任何分布式框架都可以受 YARN 支持 — 只要有人为它实现了相应的 ApplicationMaster的接口,这也就是为什么Hadoop Yarn可以支持MR、Strom、Spark、Impala等等计算框架
5、Yarn如何避免的?

Yarn的一次调度过程

在这里插入图片描述
以上流程中需要注意的是,Yarn支持将所有的计算任务全部放在applicationMaster节点上进行,如果是小任务的话,这种场景非常合适,不用造成不必要的分配资源、任务调度、监控等开销。

Step1:启动ApplicationMaster
Step2:由ApplicationMaster创建应用程序并申请资源监控运行过程

基本的任务启动调度过程如下:
1、用户向YARN中提交应用程序,其中包括ApplicationMaster程序、启动ApplicationMaster的命令、用户程序等。
2、ResourceManager为该应用程序分配第一个Container,并与对应的NodeManager通信,要求它在这个Container中启动应用程序的ApplicationMaster。
3、ApplicationMaster首先向ResourceManager注册,这样用户就可以直接通过ResourceManager查看应用程序的运行状态,然后它将为各个任务申请资源,并监控它的运行状态,直到运行结束,即重复步骤4~7。
4、ApplicationMaster采用轮询的方式通过RPC协议向ResourceManager申请和领取资源。
5、一旦ApplicationMaster申请到资源后,便与对应的NodeManager通信,要求它启动任务。
6、NodeManager为任务设置好运行环境(包括环境变量、JAR包、二进制程序等)后,将任务启动命令写到一个脚本中,并通过运行该脚本启动任务。
7、各个任务通过某个RPC协议向ApplicationMaster汇报自己的状态和进度,以让ApplicationMaster随时掌握各个任务的运行状态,从而可以在任务失败时重新启动任务。
8、应用程序运行完成后,ApplicationMaster向ResourceManager注销并关闭自己。

遗留问题:
1、MR过程中资源占用大的任务典型场景有哪些?
2、Yarn如何避免计算量大的task集中在一个节点上?
3、一个ApplicationMasterr如果结束则会释放自己的资源,能否任意一个task结束后就立刻释放对应container的资源?
4、源码级的任务提交过程以及Yarn的一个application对应的状态机

发布了12 篇原创文章 · 获赞 0 · 访问量 571

猜你喜欢

转载自blog.csdn.net/weixin_42305433/article/details/90247207