Hadoop-Yarn介绍以及作业提交流程

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qichangjian/article/details/87954206

1)关于YARN的介绍:

YARN 是一个资源调度平台,负责为运算程序提供服务器运算资源,相当于一个分布式的操作系统平台,而 MapReduce 等运算程序则相当于运行于操作系统之上的应用程序。

2)hadoop1.x中YARN的不足:

  • JobTracker是集群的事务的集中处理,存在单点故障
  • JobTracker需要完成得任务太多,既要维护job的状态又要维护job的task的状态,造成资源消耗过多
  • 在 TaskTracker 端,用Map/Reduce Task作为资源的表示过于简单,没有考虑到CPU。内存,等资源情况,将两个需要大消耗量的Task调度到一起,很容易出现OOM。
  • 把资源强制划分为 Map/Reduce Slot,当只有 MapTask 时,TeduceSlot 不能用;当只有 ReduceTask 时,MapSlot 不能用,容易造成资源利用不足。

3)hadoop2.x中YARN的新特性:

MRv2 最基本的想法是将原 JobTracker 主要的资源管理Job 调度/监视功能分开作为两个单独的守护进程
有一个全局的ResourceManager(RM)和每个 Application 有一个ApplicationMaster(AM),Application 相当于 MapReduce Job 或者 DAG jobs。
ResourceManager和 NodeManager(NM)组成了基本的数据计算框架。
ResourceManager 协调集群的资源利用,任何 Client 或者运行着的 applicatitonMaster 想要运行 Job 或者 Task 都得向 RM 申请一定的资源。
ApplicatonMaster 是一个框架特殊的库,对于 MapReduce 框架而言有它自己的 AM 实现,
用户也可以实现自己的 AM,在运行的时候,AM 会与 NM 一起来启动和监视 Tasks。

4)YARN中的角色介绍:

ResourceManager:ResoueceMananer是基于应用程序对集群资源的需求进行调度的yarn集群的主控制节点,负责协调和管理整个集群,相应用户提交的不同的类型的应用程序,解析、调度、监控等工作。ResourceManager会为每一个application启动一个MRappmaster,并且MRappmaster分散在各个nodemanager上。
ResourceManager只要有两个部分组成:
  - 应用程序管理器(ApplicationsManager, ASM): 管理和监控所有的应用程序的MRappmaster,启动应用程序的MRappmaster,以及MRappmaster失败重启
  - 调度器Scheduler):底层是一个队列,负责应用程序的执行时间和顺序
     - FIFO(先进先出的队列):先提交的任务先执行 后提交的后执行 内部只维护一个队列
     - Fair 公平调度器:所有的计算任务进行资源的平分,全局中如果只有一个job那么当前的job占用所有的资源
     - Capacity(计算能力调度器):可以根据实际的job任务的大小,进行资源的配置

YARN 集群的主节点 ResourceManager 的职责:
1、处理客户端请求
2、启动或监控 MRAppMaster
3、监控 NodeManager
4、资源的分配与调度

NodeManager:NodeManager 是 YARN 集群当中真正资源的提供者,是真正执行应用程序的容器的提供者,
监控应用程序的资源使用情况(CPU,内存,硬盘,网络),并通过心跳向集群资源调度器
ResourceManager 进行汇报以更新自己的健康状态。同时其也会监督 Container 的生命周期
管理,监控每个 Container 的资源使用(内存、CPU 等)情况,追踪节点健康状况,管理日
志和不同应用程序用到的附属服务(auxiliary service)。

YARN 集群的从节点 NodeManager 的职责:
1、管理单个节点上的资源
2、处理来自 ResourceManager 的命令
3、处理来自 MRAppMaster 的命令

MRAppMaster:为当前的job的mapTask和reduceTask向ResourceManager 申请资源、监控当前job的mapTask和reduceTask的运行状况和进度、为失败的MapTask和reduceTask重启、负责对mapTask和reduceTask的资源回收。

Container :Container 是一个容器,一个抽象的逻辑资源单位。容器是由ResourceManager Scheduler 服务动态分配的资源构成的,它包括该节点上的一定量的cpu、网络、IO、内存,MapReduce 程序的所有 Task 都是在一个容器里执行完成的。

ASM:应用程序管理器 ASM 负责管理整个系统中所有应用程序,包括应用程序提交、与调度器协
商资源以启动 MRAppMaster、监控 MRAppMaster 运行状态并在失败时重新启动它等
Scheduler:调度器根据应用程序的资源需求进行资源分配,不参与应用程序具体的执行和监控等工作资源分配的单位就是 Container,调度器是一个可插拔的组件,用户可以根据自己的需求实
现自己的调度器。YARN 本身为我们提供了多种直接可用的调度器,比如 FIFO,Fair Scheduler和 Capacity Scheduler 等

5)YARN 作业执行流程

在这里插入图片描述

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

猜你喜欢

转载自blog.csdn.net/qichangjian/article/details/87954206