Yarn
Yarn概述
Yarn是一个资源高度平台,负责为运算程序提供服务器运算资源,相当于一个分布式的操作系统平台,而Mapreduce等运算程序则相当于运行于操作系统之上的应用程序。
yarn组成
ResourceManager、NodeManager、ApplicationMaster和Container等
组件名称 | 作用 |
---|---|
ResourceManager(RM) | (1)处理客户端请求(2)监控NodeManager(3)启动或监控ApplicationMaster(4)资源的分配与调度 |
NodeManager(NM) | (1)管理单个节点上的资源(2)处理来自ResourceManager的命令(3)处理来自ApplicationMaster的命令 |
ApplicationMaster(AM) | (1)负责数据的切分(2)为应用程序申请资源并分配给内部的任务(3)任务的监控与容错 |
Container | 资源抽象,它封装了某个节点的多维度资源,比如内存、磁盘、CPU等 |
yarn工作机制
- MR程序提交到客户端所在的节点。
- YarnRunner向ResourceManager申请一个Application。
- RM将该应用程序的资源路径返回给YarnRunner。
- 该程序将运行所需资源提交到HDFS上。
- 程序资源提交完毕后,客户端向MR申请运行mrAppMaster。
- RM将用户的请求初始化成一个Task。
- 其中一个NodeManager领取到Task任务。
- 该NodeManager创建容器Container,并产生mrAppMaster。
- Container从HDFS上拷贝资源到本地。
- mrAppMaster向RM申请运行MapTask资源。
- RM将运行MapTask任务分配给另外两个NodeManager,另两个NodeManager
分别领取任务并创建容器。 - mrAppMaster向两个接收到任务的NodeManager发送程序启动脚本,这两个NodeManager分别启动MapTask,MapTask对数据分区排序。
- MrAppMaster等待所有MapTask运行完毕后,向RM申请容器,运行ReduceTask。
- ReduceTask向MapTask获取相应分区的数据。
- 程序运行完毕后,mrAppMaster会向RM申请注销自己。
资源调度器
Hadoop作业调度器主要有三种:FIFO(先进先出)、CapacityScheduler(容量高度器)和FairScheduler(公平调度器)。
-
容量调度器特点
-
容量调度器资源分配算法
-
公平调度器资源分配
yarn常用命令
- 列出所有Application:
yarn application -list
- 根据Application状态过滤:
yarn application -list -appStates 状态
- kill掉Application:
yarn application -kill ApplicationID
- yarn查看Application日志:
yarn logs -applicationId id
- 查询某个容器的日志:
yarn logs -applicationId id -containerId id
- 查看尝试运行的任务:
yarn applicationattempt -list appid
- 打印ApplicationAttempt状态:
yarn applicationattempt -status appid
- 列出所有container:
yarn container -list applicationattemptid
- 打印container状态:
yarn container -status containerid
- 列出所有节点:
yarn node -list -all
- 加载队列配置:
yarn queue -status queueName
Yarn的常用参数设置
- 设置container分配最小内存:yarn.scheduler.minimum-allocation-mb 1024 给应用程序container分配的最小内存
- 设置container分配最大内存:yarn.scheduler.maximum-allocation-mb 8192 给应用程序container分配的最大内存
- 设置每个container的最小虚拟内核个数:yarn.scheduler.minimum-allocation-vcores 1 每个container默认给分配的最小的虚拟内核个数
- 设置每个container的最大虚拟内核个数:yarn.scheduler.maximum-allocation-vcores 32 每个container可以分配的最大的虚拟内核的个数
- 设置NodeManager可以分配的内存大小:yarn.nodemanager.resource.memory-mb 8192 nodemanager可以分配的最大内存大小,默认 8192Mb
- 定义每台机器的内存使用大小:yarn.nodemanager.resource.memory-mb 8192
- 定义交换区空间可以使用的大小:交换区空间就是讲一块硬盘拿出来做内存使用,这里指定的是nodemanager的2.1倍,yarn.nodemanager.vmem-pmem-ratio 2.1