四, Hadoop基础架构-YARN工作流程和调度器原理

四, Hadoop基础架构-YARN

一, Yarn-资源调度器

  • Yarn(Yet Another Resource Negotiator)是一个资源调度平台, 负责为运算程序提供服务器运算资源, 相当于一个分布式的操作系统平台, 而MapReduce等运算程序则相当于运行在这个操作系统上的应用程序.

1.1 Yarn 基础架构(RM, NM, AM, Contaioner)

  • Yarn主要由 RM(resource manager), NM(node manager), AM(application master) 和 Container等组件构成

  • Yarn各个组件的具体功能如下:
    请添加图片描述

1.2 Yarn 工作流程详解(重要!)

在从作业提交到运行完成整个流程中, 我们可以把与Yarn相关的作业工作流程大致分为下面五个阶段

  1. 作业提交;
  2. 作业初始化;
  3. 任务分配;
  4. 任务运行;
  5. 作业完成;
  1. 作业提交阶段

在这里插入图片描述

一, Client通过job.waitForCompletion()向ResourceManager 提交Job, 在这期间会申请一个JobId;

二, RM收到请求后, 返回资源提交路径(hdfs或者file:/…/staging)和唯一JobId;

三, Client根据RM返回信息把(jar包, xml配置文件, 切片文件)资源上传到指定位置;

四, Client提交完资源后,向RM提交执行作业请求, RM收到请求后, 创建一个ApplcationManager(AM)来管理这个Job.

  1. 作业初始化阶段

在这里插入图片描述

五, 新创建的AM会把Job添加到ResourceScheduler(资源调度程序)中,在这个Rs中, 维护了一个队列,所有待执行的Job都会暂存到这个队列中, 并按照一定规则等待执行.

六, 当轮到某个Job执行时, RS会通知AM有空闲的NM可以用来执行Job了;

七, AM会调用RM分配给它的NM, 在其中开辟一个Container(封装了运行Job需要的资源), 并在Container中启动管理待执行JobApplicationMaster(AppMaster);

八, AM获取第一步中Client提交到HDFS上的文件, 根据切片信息生成Task, Task的种类可以是MapTask, 也可以是ReduceTask.

  1. 任务分配阶段

在这里插入图片描述

九, AppMaster向RM申请运行Task任务的资源.

十, RM将需要运行的Task分配给空闲的NM, NM分别领取任务, 并创建用于执行Task的Container.

  1. 任务运行阶段

在这里插入图片描述

十一, AM通知所有接收任务的NM启动计算;

十二, NM启动Task计算;

十三, 如果这批Task运行完毕后还有新的Task需要执行, 则向RM申请Container, 运行新的Task;

十四, 所有的Job执行完毕, AM向RM申请注销自己;

  1. 作业完成阶段

在这里插入图片描述

十五, YARN 中的任务将其进度和状态(包括 counter)返回给应用管理器, 客户端每秒(通过mapreduce.client.progressmonitor.pollinterval 设置)向应用管理器请求进度更新, 展示给用户。

十六, 除了向应用管理器请求作业进度外, 客户端每 5 秒都会通过调用 waitForCompletion()来检查作业是否完成。时间间隔可以通过 mapreduce.client.completion.pollinterval 来设置。作业完成之后, 应用管理器和 Container 会清理工作状态。作业的信息会被作业历史服务器存储以备之后用户核查。
在这里插入图片描述

1.4 Yarn调度器和调度算法

目前,Hadoop 作业调度器主要有三种:FIFO、容量(Capacity Scheduler)和公平(Fair Scheduler)。Apache Hadoop3.1.3 默认的资源调度器是 Capacity Scheduler。 CDH 框架默认调度器是 Fair Scheduler。

  • 具体的设置项见, yarn-default.xml文件

在这里插入图片描述

1.4.1 先进先出调度器(FIFO)

  • FIFO 调度器(First IN First Out): 单队列, 根据提交作业的先后顺序, 先来先服务.

在这里插入图片描述

优缺点:

优点: 简单易懂;
缺点: 不支持多队列, 生产环境很少使用.

1.4.2 容量调度器(Capacity Scheduler)

在这里插入图片描述

特点:

  1. 多队列: 每个队列可配置一定的资源量, 每个队列采用FIFO调度策略;
  2. 容量保证: 管理员为每个队列设置资源最低保证资源使用上限;
  3. 灵活性: 如果一个队列中的资源有剩余, 可以暂时共享给那些需要资源的队列, 而一旦该队列有新的应用程序提交, 则其他队列借调的资源会归还给该队列;
  4. 多租户: 支持多用户共享集群和多应用程序同时运行. 为了防止同意用户的作业独占队列中的资源, 该调度器会对同一用户提交的作业所占资源量进行限定.

1.4.2.1 容量调度器调度算法

在这里插入图片描述

1.4.3 公平调度器(Fair Scheduler)

在这里插入图片描述

[公平调度器-缺额]

在这里插入图片描述

1.4.3 公平调度器资源分配策略

请添加图片描述

请添加图片描述
请添加图片描述
请添加图片描述

二, Yarn 常用命令(待补充)

Guess you like

Origin blog.csdn.net/nmsLLCSDN/article/details/119892602