知识库 : UDH YARN配置调优

Edit Document

UDH YARN配置调优

目录

UDH YARN 配置调优

一、内存配置

二、 cpu 配置

 

YARN 作为一个资源调度器,应该考虑到集群里面每一台机子的计算资源,然后根据 application 申请的资源进行分配 Container Container YARN 里面资源分配的基本单位,具有一定的内存以及 CPU 资源。

UDH YARN 集群中,平衡内存、 CPU 、磁盘的资源的很重要的,根据经验,每两个 container 使用一块磁盘以及一个 CPU 核的时候可以使集群的资源得到一个比较好的利用。

一、内存配置

YARN 以及 MAPREDUCE 所有可用的内存资源应该要除去系统运行需要的以及其他的 hadoop 的一些程序,总共保留的内存 = 系统内存 +HBASE 内存。

参考 hortonwork 公司的文档 Determine HDP Memory Configuration Settings 来配置你的集群。

每台机器内存

系统需要的内存

H base需要的内存

4GB

1GB

1GB

8GB

2GB

1GB

16GB

2GB

2GB

24GB

4GB

4GB

48GB

6GB

8GB

64GB

8GB

8GB

 

计算每台机 最多可以拥有多少个 container ,可以使用下面的公式 :

containers = min (2*CORES, 1.8*DISKS, (Total available RAM) / MIN_CONTAINER_SIZE)

          CORES 为机器 CPU 核数

          DISKS 为机器上挂载的磁盘个数

          Total available RAM 为机器总内存

          MIN_CONTAINER_SIZE 是指 container 最小的容量大小,

这需要根据具体情况去设置,可以参考下面的表格:

每台机器可用的 RAM

C ontainer 最小值

小于 4GB

256MB

4GB 8GB

512MB

8GB 24GB

1024MB

大于 24GB

2048MB

 

每个 container 的平均使用内存大小计算方式为:

RAM-per-container = max(MIN_CONTAINER_SIZE, (Total Available RAM) / containers))

通过上面的计算, YARN 以及 MAPREDUCE 可以这样配置:

 

 

配置文件

配置设置

默认值

计算值

yarn-site.xml

yarn.nodemanager.resource.memory-mb

8192 MB

= containers * RAM-per-container

yarn-site.xml

yarn.scheduler.minimum-allocation-mb

1024MB

=RAM-per-container

yarn-site.xml

yarn.scheduler.maximum-allocation-mb

8192 MB

= containers * RAM-per-container

yarn-site.xml

yarn.app.mapreduce.am.resource.mb

1536 MB

= 2 * RAM-per-container

yarn-site.xml

yarn.app.mapreduce.am.command-opts

-Xmx1024m

= 0.8 * 2 * RAM-per-container

mapred-site.xml

mapreduce.map.memory.mb

1024 MB

=RAM-per-containr

mapred-site.xml

mapreduce.reduce.memory.mb

1024 MB

= 2 * RAM-per-container

mapred-site.xml

mapreduce.map.java.opts

 

= 0.8 * RAM-per-container

mapred-site.xml

mapreduce.reduce.java.opts

 

= 0.8 * 2 * RAM-per-container

 

 

举个例子:对于 128G 内存、 32 CPU 的机器,挂载了 7 个磁盘,根据上面的说明,系统保留内存为 24G ,不适应 HBase 情况下,系统剩余可用内存为 104G ,计算 containers 值如下:

containers = min (2*32, 1.8* 7 , (128-24)/2) = min (64, 12.6 , 51) = 13

计算 RAM-per-container 值如下:

RAM-per-container = max (2, (124-24)/13) = max (2, 8) = 8

这样的话,每个 container 内存为 8G ,似乎有点多,我更愿意根据集群使用情况任务将其调整为 2G 内存,则集群中下面的参数配置值如下:

 

 

配置文件

配置设置

计算值

yarn-site.xml

yarn.nodemanager.resource.memory-mb

= 52 * 2 =104 G

yarn-site.xml

yarn.scheduler.minimum-allocation-mb

= 2G

yarn-site.xml

yarn.scheduler.maximum-allocation-mb

= 52 * 2 = 104G

yarn-site.xml

yarn.app.mapreduce.am.resource.mb

= 2 * 2=4G

yarn-site.xml

yarn.app.mapreduce.am.command-opts

= 0.8 * 2 * 2=3.2G

mapred-site.xml

mapreduce.map.memory.mb

= 2G

mapred-site.xml

mapreduce.reduce.memory.mb

= 2 * 2=4G

mapred-site.xml

mapreduce.map.java.opts

= 0.8 * 2=1.6G

mapred-site.xml

mapreduce.reduce.java.opts

= 0.8 * 2 * 2=3.2G

 

 

 

另外,还有一下几个参数:

          yarn.nodemanager.vmem-pmem-ratio :任务每使用 1MB 物理内存,最多可使用虚拟内存量,默认是 2.1

          yarn.nodemanager.pmem-check-enabled :是否启动一个线程检查每个任务正使用的物理内存量,如果任务超出分配值,则直接将其杀掉,默认是 true

          yarn.nodemanager.vmem-pmem-ratio :是否启动一个线程检查每个任务正使用的虚拟内存量,如果任务超出分配值,则直接将其杀掉,默认是 true

第一个参数的意思是当一个 map 任务总共分配的物理内存为 2G 的时候,该任务的 container 最多内分配的堆内存为 1.6G ,可以分配的虚拟内存上限为 2*2.1=4.2G 。另外,照这样算下去,每个节点上 YARN 可以启动的 Map 数为 104/2=52 个。

 

二、 cpu 配置

YARN 中目前的 CPU 被划分成虚拟 CPU CPU virtual Core ),这里的虚拟 CPU YARN 自己引入的概念,初衷是,考虑到不同节点的 CPU 性能可能不同,每个 CPU 具有的计算能力也是不一样的,比如某个物理 CPU 的计算能力可能是另外一个物理 CPU 2 倍,这时候,你可以通过为第一个物理 CPU 多配置几个虚拟 CPU 弥补这种差异。用户提交作业时,可以指定每个任务需要的虚拟 CPU 个数。

YARN 中, CPU 相关配置参数如下:

          yarn.nodemanager.resource.cpu-vcores :表示该节点上 YARN 可使用的虚拟 CPU 个数,默认是 8 ,注意,目前推荐将该值设值为与物理 CPU 核数数目相同。如果你的节点 CPU 核数不够 8 个,则需要调减小这个值,而 YARN 不会智能的探测节点的物理 CPU 总数。

          yarn.scheduler.minimum-allocation-vcores :单个任务可申请的最小虚拟 CPU 个数,默认是 1 ,如果一个任务申请的 CPU 个数少于该数,则该对应的值改为这个数。

          yarn.scheduler.maximum-allocation-vcores :单个任务可申请的最多虚拟 CPU 个数,默认是 32

对于一个 CPU 核数较多的集群来说,上面的默认配置显然是不合适的,在我的测试集群中, 4 个节点每个机器 CPU 核数为 31 ,留一个给操作系统,可以配置为:

  <property>

      <name>yarn.nodemanager.resource.cpu-vcores</name>

      <value>31</value>

  </property>

  <property>

      <name>yarn.scheduler.maximum-allocation-vcores</name>

      <value>124</value>

  </property>

 

 

Attachments:

UDH YARN配置调优.docx (application/vnd.openxmlformats-officedocument.wordprocessingml.document)