一. Yarn资源参数调优

概念介绍:

概念中文称

概念英文名

解释

容器

container

Yarn中动态资源分配的基本单位,拥有一定的内存及CPU核数

物理核

pcore

服务器上物理CPU的核

虚拟核

vcore

设计初衷是考虑不同节点的CPU的性能不一样,每个CPU的计算能力不一样。比如某个物理CPU是另外一个物理CPU的2倍,这时通过设置第一个物理CPU的虚拟core来弥补这种差异

涉及参数:

文件

参数

默认大小

备注

yarn-site.xml

yarn.nodemanager.resource.pcores-vcores-multiplier

1

将pcore转化为vcore的乘数,若为2,表示pcore*2=vcore。推荐pcore:vcore=1:2

yarn-site.xml

yarn.nodemanager.resource.memory-mb

-1

所有conatiner能使用的物理内存总和

yarn-site.xml

yarn.scheduler.minimum-allocation-mb

1024

单个container向RM能申请到的最小内存

yarn-site.xml

yarn.scheduler.maximum-allocation-mb

8192

单个container向RM能申请到的最大内存

yarn-site.xml

yarn.nodemanager.resource.cpu-vcores

-1

所有container能使用的vcore总和

yarn-site.xml

yarn.scheduler.minimum-allocation-vcores

1

单个container想RM能申请到的最小vcore数量

yarn-site.xml

yarn.scheduler.maximum-allocation-vcores

4

单个container想RM能申请到的最大vcore数量。cloudera公司推荐一个container的vcores最好不要超过5,一般我们设置为4

对于DataNode和NodeManager,一般设置为2G和4G

组件

文件

参数

默认大小

备注

DataNode

hadoop-env.sh

HADOOP_HEAPSIZE=

1000

改为2048

NodeManager

yarn-env.sh

YARN_HEAPSIZE=

1000

改为4096

例1:
假设一台服务器,内存128G,16个pcore,需要安装DataNode和NodeManager,
具体如何设置参数?
1)装完CentOS,消耗内存1G;
2)系统预留15%-20%(包含第1点),防止全部使用二导致系统夯住或者OOM机制事件,
   或者给未来部署其他组件预留空间。此时余下128*80%=102G
3)DataNode设定2G,NodeManager设定4G,则剩余102-2-4=96G;
4)明确两点:pcore:vcore=1:2 ,故vcore数量为16*2=32;单个container占用4个vcore
5)确定 memory和vcore 
yarn.nodemanager.resource.cpu-vcores     -->  32  # 16*2=32
yarn.scheduler.minimum-allocation-vcores -->  1   # 最多有32个container
yarn.scheduler.maximum-allocation-vcores -->  4   # 最少有8个container 
yarn.nodemanager.resource.memory-mb      -->  96G # RM能使用的最大内存
yarn.scheduler.minimum-allocation-mb     -->  1G  # 
yarn.scheduler.maximum-allocation-mb     -->  12G # 极限8个(96/8)

注意:若有spark组件,当spark计算时内存不够大,
yarn.scheduler.maximum-allocation-mb势必要调大,
则这种理想化的设置会被打破,以memory为主
例2:
假设一台服务器,内存256G,56个pcore,需要安装DataNode和NodeManager,
具体如何设置参数?
1)装完CentOS,消耗内存1G;
2)系统预留15%-20%(包含第1点),防止全部使用二导致系统夯住或者OOM机制事件,
或者给未来部署其他组件预留空间。此时余下256*80%=204G
3)DataNode设定2G,NodeManager设定4G,则剩余204-2-4=198G;
4)明确两点:pcore:vcore=1:2 ,故vcore数量为56*2=112;单个container占用4个vcore
5)确定 memory和vcore 
yarn.nodemanager.resource.cpu-vcores     -->  112  # 56*2=112
yarn.scheduler.minimum-allocation-vcores -->  1    # 最多有112个container
yarn.scheduler.maximum-allocation-vcores -->  4    # 最少有28个container 
yarn.nodemanager.resource.memory-mb      -->  198G # RM能使用的最大内存
yarn.scheduler.minimum-allocation-mb     -->  1G   # 
yarn.scheduler.maximum-allocation-mb     -->  7G   # 极限28个(198/28)
例3:
假设一台服务器,内存256G,56个pcore,需要安装DataNode、NodeManager和hbase regionserver(占用30G),
具体如何设置参数?
1)装完CentOS,消耗内存1G;
2)系统预留15%-20%(包含第1点),防止全部使用二导致系统夯住或者OOM机制事件,
或者给未来部署其他组件预留空间。此时余下256*80%=204G
3)DataNode设定2G,NodeManager设定4G,则剩余204-2-4-30=168G;
4)明确两点:pcore:vcore=1:2 ,故vcore数量为56*2=112;单个container占用4个vcore
5)确定 memory和vcore
yarn.nodemanager.resource.cpu-vcores     -->  112  # 56*2=112
yarn.scheduler.minimum-allocation-vcores -->  1    # 最多有112个container
yarn.scheduler.maximum-allocation-vcores -->  4    # 最少有28个container 
yarn.nodemanager.resource.memory-mb      -->  168G # RM能使用的最大内存
yarn.scheduler.minimum-allocation-mb     -->  1G   # 
yarn.scheduler.maximum-allocation-mb     -->  6G   # 极限28个(168/28)
思考:
第一台服务器配置好,pcore:vcore=1:2,
第一台服务器配置好,pcore:vcore=1:1,该怎么办?
通过各个节点上的XML文件配置实现

二. 调度器整理三种

  • 区别是什么?
2.1 FIFO调度器
  • 先进先出(First In First Out)调度器。FIFO 调度器是 Hadoop 使用最早的一种调度策略,可以简单的将其理解为一个队列,这意味着在集群中同时只能有一个作业运行。所有的应用程序按照提交顺序来执行,在上一个 Job 执行完成之后,下一个 Job 按照队列中的顺序执行。FIFO调度器以独占集群全部资源的方式来运行作业,这样的好处是 Job 可以充分利用集群的全部资源,但是对于运行时间短,优先级高或者交互式查询类的MR Job 需要等待它之前的 Job 完成才能被执行,这也就导致了如果前面有一个比较大的 Job 在运行,那么后面的 Job 将会被阻塞。因此,虽然 FIFO 调度器实现简单,但是并不能满足很多实际场景的要求。这也就促使 Capacity 调度器和 Fair 调度器的诞生。
2.1 Capacity调度器

计算调度器。可以将它理解为一个资源队列。资源队列需要用户自己分配。例如因为 Job 需要要把整个集群分成了AB两个队列,A队列又可以继续分,比如将A队列再分为1和2两个子队列
那么队列的分配就可以参考下面的树形结构:

—A[60%]
  |—A1[40%]
  |—A2[60%]
—B[40%]

yarn container 最大cpu yarn参数_ci

2.1 Fair调度器
  • Fair 调度器也称之为公平调度器。Fair 调度器是在整个时间线上,所有的 Job 平分资源。默认情况下,Fair 调度器只是对内存资源做公平的调度和分配。当集群中只有一个任务在运行时,那么此任务会占用集群的全部资源。当有其他的任务提交后,那些释放的资源将会被分配给新的 Job,所以每个任务最终都能获取几乎一样多的资源。
  • yarn container 最大cpu yarn参数_ci_02

  • Fair 调度器也可以在多个队列上工作,例如有两个用户A和B,他们分别拥有一个队列。当A启动一个 Job 而B没有提交任何任务时,A会获得集群全部资源;当B启动一个 Job 后,A的任务会继续运行,不过队列A会慢慢释放它的一些资源,一会儿之后两个任务会各自获得集群一半的资源。如果此时B再启动第二个 Job 并且其它任务也还在运行时,那么它将会和B队列中的的第一个 Job 共享队列B的资源,也就是队列B的两个 Job 会分别使用集群四分之一的资源,而队列A的 Job 仍然会使用集群一半的资源,结果就是集群的资源最终在两个用户之间平等的共享。
  • yarn container 最大cpu yarn参数_ci_03

  • Apache Hadoop的默认调度器是什么?
    计算调度器。看参数yarn.resourcemanager.scheduler.class的默认值

文件

参数

默认值

yarn-site.xml

yarn.resourcemanager.scheduler.class

org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler

  • Cloudera Hadoop的默认调度器是什么?
    公平调度器。Yarn web: http://localhost:8088/cluster/scheduler 可查看: