1. yarn调度流程
yarn的主要作用:管理任务,调度资源
- resourceManager:主节点,主要用于接收客户端的请求,分配资源
- nodeManager:从节点,主要是用于执行我们的任务,说白了就是提供cpu和内存的
- ApplicationMaster:主要用于申请资源,分配资源,分配任务,任务生命周期的管理
- container:资源分配的单位,所有的任务执行,都在container里面,主要用于分配资源,以及回收资源
- JobHistory:查看历史完成的任务的日志
- TimeLineServer:2.4以后引入的新特性 查看正在执行的任务的情况
2. yarn当中的资源调度器种类
调度器:主要是用于研究一个任务提交之后,下一个任务又来了该怎么执行。决定我们任务如何进行执行
- 第一种:队列调度器 FIFO。第一个任务提交,先执行,然后第二个任务提交,等着第一个任务执行完毕之后再执行第二个任务
-
第一个任务:大任务,需要运行4个小时
第二个任务:小任务,需要运行3分钟
这种调度器没人用,不管是apache软件的版本,还是CDH软件的版本 - 第二种调度器:capacity Scheduler 容量调度器 apache的版本默认使用的调度器
将整个资源,划分成好多块。
根据我们提交的任务需要资源的大小,将我们的任务,划分到不同的资源队列里面去,可以允许多个任务并行的快速的执行
缺点:将资源给划散了 - 第三种调度器:Fair scheduler 公平调度器 CDH的软件默认使用的调度器
第一个任务提交,将所有的资源 全部分配给第一个任务,保证第一个任务最快的完成
第二个任务提交:从第一个任务当中划分一部分资源出来,给第二个任务进行执行
缺点:造成资源的频繁的分配
优点:可以快速的执行我们的一些大任务
3. 关于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的管理界面的时候会发现一个问题
我们可以在yarn-site.xml当中修改以下两个参数来改变默认值 - 定义每台机器的内存使用大小
yarn.nodemanager.resource.memory-mb 8192 - 定义每台机器的虚拟内核使用大小
yarn.nodemanager.resource.cpu-vcores 8 - 定义交换区空间可以使用的大小(交换区空间就是讲一块硬盘拿出来做内存使用)
这里指定的是nodemanager的n内存的2.1倍
yarn.nodemanager.vmem-pmem-ratio 2.1