目录
- 一、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提交流程
作业提交:
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