yarn资源调优参数&yarn的调度器&yarn的常用命令

yarn资源调优参数

概念介绍

  • container
    是一个虚拟化的容器,包括memory和vcore两个维度,作用是运行appmaster和task任务
  • 物理核pcore
    服务器上实际的物理CPU的核数
  • 虚拟核vcore
    yarn引入的一个概念,设计的初衷是考虑到每台服务器的性能不一样,比如某一个物理CPU是另一个物理CPU的两倍,通过设置pcore和vcore来弥补这种差距
    比如第一台机器CPU性能强悍,设置pcore:vcore=1:2
    第二台机器CPU性能比较差,设置pcore:vcore=1:1

生产上如何调优

内存参数

在yarn-site.xml中进行配置

key value desc
yarn.nodemanager.resource.memory-mb -1 可以分配给容器的物理内存总量(以MB为单位)
yarn.scheduler.minimum-allocation-mb 1024 单个container向RM能申请到的最小内存
yarn.scheduler.maximum-allocation-mb 8192 单个container向RM能申请到的最大内存

cpu参数

在yarn-site.xml中进行配置

key value desc
yarn.nodemanager.resource.pcores-vcores-multiplier 1 将pcore转化为vcore的乘数,若为2,表示pcore*2=vcore。推荐pcore:vcore=1:2
yarn.nodemanager.resource.cpu-vcores -1 所有conatiner能使用的物理内存总和
yarn.scheduler.minimum-allocation-vcores 1 单个container向RM能申请到的最小vcore数量
yarn.scheduler.maximum-allocation-vcores 4 单个container向RM能申请到的最大vcore数量。cloudera公司推荐一个container的vcores最好不要超过5,一般我们设置为4

设置DN和NM的内存数

DN和NM在生产上的参数设置为2G和4G即可

组件 文件 参数 大小 desc
DataNode hadoop-env.sh HADOOP_HEAPSIZE= 1000 单位M,生产上一般分配2048即可
NodeManager yarn-env.sh YARN_HEAPSIZE= 1000 单位M,生产上一般分配4096即可

样例

假如服务器有128G内存,16物理cpu,需要装DN和NM,具体如何设置参数

1、装centos需要消耗1G内存
2、系统预留15%-20%,包括装centos的空间,预留的原因是防止全部被使用以及oom事件或者给未来装其他组件预留空间

128*20=25.6G==26G

还剩下 128-26=102G内存
3、假设只有dn和nm组件,装dn和nm分别需要2G和4G内存
还剩下102-2-4=96G内存
container内存的分配

yarn.nodemanager.resource.memory-mb     96G
yarn.scheduler.minimum-allocation-mb	1G   极限情况下,只有96个container 内存1G	
yarn.scheduler.maximum-allocation-mb	96G  极限情况下,只有1个container 内存96G
container的内存会自动增加,默认1g递增
container:1-96个

4、container物理核分配 (物理核:虚拟核 =1:2 ==>16:32)

yarn.nodemanager.resource.pcores-vcores-multiplier 2
yarn.nodemanager.resource.cpu-vcores            32
yarn.scheduler.minimum-allocation-vcores	1  极限情况下,只有32个container	
yarn.scheduler.maximum-allocation-vcores	32 极限情况下,只有1个container
container:1-32个

4、需要注意的是pcore:vcore=1:2 所以vcore=16*2=32核;cloudera公司推荐,一个container的vcore最好不要超过5,那么我们设置4

yarn.scheduler.maximum-allocation-vcores 4   极限情况下,只有8个container

5、综合memory+vcore,确定 vcore=4 container 8个
内存的设置为

yarn.scheduler.maximum-allocation-mb	12G 极限container 8个

6、最终的设置为

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 # container能使用的最大内存
yarn.scheduler.minimum-allocation-mb     -->  1G  # 
yarn.scheduler.maximum-allocation-mb     -->  12G # 极限8个(96/8)

当然当spark计算时内存不够大,这个参数肯定要调大,
那么这种理想化的设置个数必然要打破,以memory为主

假如服务器有256G内存,56物理cpu,需要装DN、NM和hbase regionserver,具体如何设置参数

1、需要减去内存开销和其他组件的开销

预留 15%-20%(包括装centos消耗的内存)
dn 2G
nm 4G
hbase regionserver 30G

还剩余256-2560.2-2-4-30 = 168G
2、pcore:vcore=1:2 ,故vcore数量为56
2=112;单个container占用4个vcore,确定 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)

yarn的调度器整理三种

在Yarn中有三种调度器可以选择:FIFO Scheduler ,Capacity Scheduler,FairScheduler。

FIFO 先进先出调度器

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

Capacity 计算调度器

而对于Capacity调度器,有一个专门的队列用来运行小任务,但是为小任务专门设置一个队列会预先占用一定的集群资源,这就导致大任务的执行时间会落后于使用FIFO调度器时的时间。
在这里插入图片描述

Fair 公平调度器

在Fair调度器中,我们不需要预先占用一定的系统资源,Fair调度器会为所有运行的job动态的调整系统资源。如上图所示,当第一个大job提交时,只有这一个job在运行,此时它获得了所有集群资源;当第二个小任务提交后,Fair调度器会分配一半资源给这个小任务,让这两个任务公平的共享集群资源。

需要注意的是,在上图Fair调度器中,从第二个任务提交到获得资源会有一定的延迟,因为它需要等待第一个任务释放占用的Container。小任务执行完成之后也会释放自己占用的资源,大任务又获得了全部的系统资源。最终的效果就是Fair调度器即得到了高的资源利用率又能保证小任务及时完成。
在这里插入图片描述

apache和cdh的默认调度器

Apache Hadoop的默认调度器是什么

yarn-site.xml进行设置

key value desc
yarn.resourcemanager.scheduler.class org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler 默认是计算调度器

cdh的默认调度器是什么

默认调度器是:公平调度器
可以登录yarn的页面查看
在这里插入图片描述

yarn的常用命令

运行jar包

yarn jar
hadoop jar

杀死yarn的进程

使用场景,进程夯住了或者提交错任务了
yarn application -kill < application ID>
在这里插入图片描述

下载log日志

[hadoop@JD ~]$ yarn logs
Retrieve logs for completed YARN applications.
usage: yarn logs -applicationId [OPTIONS]

general options are:
-appOwner AppOwner (assumed to be current user if
not specified)
-containerId ContainerId (must be specified if node
address is specified)
-nodeAddress NodeAddress in the format nodename:port
(must be specified if container id is
specified)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章