目录

  • 一、Yarn的组件和作用
  • 1、ResourceManager
  • 2、NodeManager
  • 3、ApplicationMaster
  • 4、Container
  • 二、Yarn的job提交流程
  • 1、客户端提交作业,申请jobID
  • 2、ResourceManager返回一个jobID,并将存放资源的HDFS路径返回给客户端
  • 3、客户端把运行作业的资源上传到RM返回的HDFS路径上,上传内容为jar包、配置信息、分片信息等(job.jar、job.xml、job.split、job.splitinfo 等信息)
  • 4、上传成功后,向ResourceManager发送请求,申请运行AppMaster,执行作业
  • 5、RM中的ApplicationManager将执行作业的请求转发给调度器
  • 6、调度器把任务放在调度队列,当执行到这个作业的请求时,会通知ApplicationManager分配容器,某一个空闲的NM领取到该Job后,调用NodeManager上的Container容器,创建作业对应的ApplicationMaster
  • 7、ApplicationManager通知DataNode上的NodeManager启动Container,并且启动ApplicationMaster
  • 8、ApplicationMaster下载HDFS上client提交的文件,根据切片信息,创建MapTask和ReduceTask
  • 9、ApplicationMaster向调度器申请运行MapTask和ReduceTask的资源
  • 10、调度器返回任务分配的信息,把运行MapTask的任务分配给空闲的NM,NM分别领取任务并创建容器(Container)
  • 11、ApplicationMaster通知各个节点上的NodeManager,启动任务
  • 12、NodeManager启动此节点上的任务
  • 13、任务启动后,MapTask和ReduceTask接受共享HDFS路径上的文件数据
  • 14、任务完成后,ApplicationMaster向RM申请注销自己,释放资源
  • 15、进度和状态更新。
  • 三、调度器分类
  • 四、Yarn常用命令


一、Yarn的组件和作用

1、ResourceManager

RM是Yarn中的全局资源管理器,接收各个 节点的资源回报信息,并按照一定的策略分配给应用程序。由ApplicationManager(应用管理器)和ResourceScheduler(资源调度器)组成,功能:

  • 处理客户端请求;
  • 监控NM和NM的心跳,发送指令给NM;
  • 启动和监控ApplicationMaster,进行必要的重启;
  • 整个系统的资源分配和调度

2、NodeManager

本节点上的资源管理和任务管理,发送心跳给RM,接收RM的命令。

  • 管理单个节点上的资源
  • 定时向RM汇报本节点上的Container资源使用情况和运行情况
  • 接收和处理RM的命令:Container的启动和停止
  • 处理ApplicationMaster的指令:启动MapTask和ReduceTask任务等

NM在部分场景下会kill掉Container:任务已经完成;Container被RS分配给其他job;使用的资源超限。

3、ApplicationMaster

  • 负责数据切分
  • 向RM申请资源(Container),并分配内部任务(MT和RT)
  • 与NM通信,启动/停止任务
  • 负责任务的监控和容错。当某些task运行出错,进行容错处理

4、Container

  • Container是Yarn中的资源抽象,封装了某个节点上的多维度资源,比如:内存、CPU、磁盘、网络等。类似一个虚拟机。一个节点可以运行多个Container,但不能多个节点运行一个。

二、Yarn的job提交流程

hadoop的开发流程 hadoop工作流程_hadoop的开发流程


作业提交:

1、客户端提交作业,申请jobID

2、ResourceManager返回一个jobID,并将存放资源的HDFS路径返回给客户端

3、客户端把运行作业的资源上传到RM返回的HDFS路径上,上传内容为jar包、配置信息、分片信息等(job.jar、job.xml、job.split、job.splitinfo 等信息)

4、上传成功后,向ResourceManager发送请求,申请运行AppMaster,执行作业

作业初始化:

5、RM中的ApplicationManager将执行作业的请求转发给调度器

调度器去调配资源,谁先谁后,到谁了

6、调度器把任务放在调度队列,当执行到这个作业的请求时,会通知ApplicationManager分配容器,某一个空闲的NM领取到该Job后,调用NodeManager上的Container容器,创建作业对应的ApplicationMaster

7、ApplicationManager通知DataNode上的NodeManager启动Container,并且启动ApplicationMaster

8、ApplicationMaster下载HDFS上client提交的文件,根据切片信息,创建MapTask和ReduceTask

任务分配

9、ApplicationMaster向调度器申请运行MapTask和ReduceTask的资源

10、调度器返回任务分配的信息,把运行MapTask的任务分配给空闲的NM,NM分别领取任务并创建容器(Container)

任务运行

11、ApplicationMaster通知各个节点上的NodeManager,启动任务

12、NodeManager启动此节点上的任务

13、任务启动后,MapTask和ReduceTask接受共享HDFS路径上的文件数据

14、任务完成后,ApplicationMaster向RM申请注销自己,释放资源

15、进度和状态更新。

YARN 中的任务将其进度和状态(包括 counter)返回给应用管理器, 客户端每秒(通过mapreduce.client.progressmonitor.pollinterval 设置)向应用管理器请求进度更新, 展示给用户。可以使用 YARN WebUI 查看任务执行状态。
除了向应用管理器请求作业进度外, 客户端每 5 分钟都会通过调用 waitForCompletion() 来检查作业是否完成。
时间间隔可以通过mapreduce.client.completion.pollinterval 来设置。
作业完成之后, 应用管理器和container 会清理工作状态。作业的信息会被作业历史服务器存储以备之后用户核查。

三、调度器分类

Resouce Scheduler 只是一个纯调度器,只负责 给用户提交的应用分配 Container(资源),分为以下三种:

1、先进先出调度器(FIFO)
先进先出,给队列中最前面的应用分配资源,然后下一个,以此类推。不适用于共享集群,大的应用可能会占用所有集群资源,导致其他应用被阻塞。

2、容量调度器(Capacity Scheduler)
支持多个队列,每个队列配置一定的资源量,并且都采用FIFO调度策略。相当于可以并行多个队列上的任务

3、公平调度器(Fair Scheduler)
调度器会为所有运行的job动态的调整资源。支持多队列多用户,每个队列中的资源量可以配置,统一队列中的作业公平共享队列中所有资源

hadoop2.6.0-cdh5.14.2默认调度器是容量调度器,可以查看yarn-default.xml文件查看具体设置

四、Yarn常用命令

1、yarn application 命令列表

2、查看正在运行的任务列表 yarn application -list

3、杀掉正在运行的任务 yarn application -kill 任务 id

4、查看节点列表 yarn node -list

5、查看节点状况 yarn node -status 节点 id

6、查看 yarn 依赖 jar 的环境变量 yarn classpath