Hadoop-Yarn参数调优+三种调度器

一. Yarn资源参数调优

概念介绍:

概念中文称概念英文名解释
容器containerYarn中动态资源分配的基本单位,拥有一定的内存及CPU核数
物理核pcore服务器上物理CPU的核
虚拟核vcore设计初衷是考虑不同节点的CPU的性能不一样,每个CPU的计算能力不一样。比如某个物理CPU是另外一个物理CPU的2倍,这时通过设置第一个物理CPU的虚拟core来弥补这种差异

涉及参数:

文件参数默认大小备注
yarn-site.xmlyarn.nodemanager.resource.pcores-vcores-multiplier1将pcore转化为vcore的乘数,若为2,表示pcore*2=vcore。推荐pcore:vcore=1:2
yarn-site.xmlyarn.nodemanager.resource.memory-mb-1所有conatiner能使用的物理内存总和
yarn-site.xmlyarn.scheduler.minimum-allocation-mb1024单个container向RM能申请到的最小内存
yarn-site.xmlyarn.scheduler.maximum-allocation-mb8192单个container向RM能申请到的最大内存
yarn-site.xmlyarn.nodemanager.resource.cpu-vcores-1所有container能使用的vcore总和
yarn-site.xmlyarn.scheduler.minimum-allocation-vcores1单个container想RM能申请到的最小vcore数量
yarn-site.xmlyarn.scheduler.maximum-allocation-vcores4单个container想RM能申请到的最大vcore数量。cloudera公司推荐一个container的vcores最好不要超过5,一般我们设置为4

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

组件文件参数默认大小备注
DataNodehadoop-env.shHADOOP_HEAPSIZE=1000改为2048
NodeManageryarn-env.shYARN_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%]

在这里插入图片描述

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

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

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

文件参数默认值
yarn-site.xmlyarn.resourcemanager.scheduler.classorg.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler
  • Cloudera Hadoop的默认调度器是什么?
    公平调度器。Yarn web: http://localhost:8088/cluster/scheduler 可查看:在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值