更新时间:2024-07-24 GMT+08:00

Yarn节点配置调优

操作场景

合理配置大数据集群的调度器后,还可通过调节每个节点的可用内存、CPU资源及本地磁盘的配置进行性能调优。

具体包括以下配置项:

  • 可用内存
  • CPU虚拟核数
  • 物理CPU使用百分比
  • 内存和CPU资源的协调
  • 本地磁盘

操作步骤

若您需要对参数配置进行调整,具体操作请参考修改集群服务配置参数

  • 可用内存

    除了分配给操作系统、其他服务的内存外,剩余的资源应尽量分配给YARN。通过如下配置参数进行调整。

    例如,如果一个container默认使用512M,则内存使用的计算公式为:512M*container数。

    默认情况下,Map或Reduce container会使用1个虚拟CPU内核和1024MB内存,ApplicationMaster使用1536MB内存。

    参数

    描述

    默认值

    yarn.nodemanager.resource.memory-mb

    设置可分配给容器的物理内存数量。单位:MB,取值范围大于0。

    建议配置成节点物理内存总量的75%~90%。若该节点有其他业务的常驻进程,请降低此参数值给该进程预留足够运行资源。如果节点的总物理内存空间较大,且无其他业务的常驻进程时,该参数可配置为:总物理内存 - NodeManager的常驻进程所占内存。

    MRS 3.x及之后:16384

    MRS 3.x之前:8192

  • CPU虚拟核数

    建议将此配置设定在逻辑核数的1.5~2倍之间。如果上层计算应用对CPU的计算能力要求不高,可以配置为2倍的逻辑CPU。

    参数

    描述

    默认值

    yarn.nodemanager.resource.cpu-vcores

    表示该节点上YARN可使用的虚拟CPU个数,默认是8。

    目前推荐将该值设置为逻辑CPU核数的1.5~2倍之间。

    • 若任务为计算密集型,该参数可设置为与逻辑CPU核数一致。
    • 若任务为非计算密集型资源,该参数可设置为逻辑CPU核数的1.5~2倍之间。
    • 若任务所使用的CPU核数与内存资源差异较大时,CPU资源可参考实际的内存资源进行配置。例如大部分任务使用1核3G,如果“yarn.nodemanager.resource.memory-mb”设置380G,那么该参数设置为128。

    8

  • 物理CPU使用百分比

    建议预留适量的CPU给操作系统和其他进程(数据库、HBase等)外,剩余的CPU核都分配给YARN。可以通过如下配置参数进行调整。

    参数

    描述

    默认值

    yarn.nodemanager.resource.percentage-physical-cpu-limit

    表示该节点上YARN可使用的物理CPU百分比。默认是90,即不进行CPU控制,YARN可以使用节点全部CPU。该参数只支持查看,可通过调整YARN的RES_CPUSET_PERCENTAGE参数来修改本参数值。注意,目前推荐将该值设为可供YARN集群使用的CPU百分数。

    例如:当前节点除了YARN服务外的其他服务(如HBase、HDFS、Hive等)及系统进程使用CPU为20%左右,则可以供YARN调度的CPU为1-20%=80%,即配置此参数为80。

    90

  • 本地磁盘

    由于本地磁盘会提供给MapReduce写job执行的中间结果,数据量大。因此配置的原则是磁盘尽量多,且磁盘空间尽量大,单个达到百GB以上规模更好。简单的做法是配置和data node相同的磁盘,只在最下一级目录上不同即可。

    多个磁盘之间使用逗号隔开。

    参数

    描述

    默认值

    yarn.nodemanager.log-dirs

    日志存放地址(可配置多个目录)。

    容器日志的存储位置。默认值为%{@auto.detect.datapart.nm.logs}。如果有数据分区,基于该数据分区生成一个类似/srv/BigData/hadoop/data1/nm/containerlogs,/srv/BigData/hadoop/data2/nm/containerlogs的路径清单。如果没有数据分区,生成默认路径/srv/BigData/yarn/data1/nm/containerlogs。除了使用表达式以外,还可以输入完整的路径清单,比如/srv/BigData/yarn/data1/nm/containerlogs或/srv/BigData/yarn/data1/nm/containerlogs,/srv/BigData/yarn/data2/nm/containerlogs。这样数据就会存储在所有设置的目录中,一般会是在不同的设备中。为保证磁盘IO负载均衡,需要提供几个路径且每个路径都对应一个单独的磁盘。应用程序的本地化后的日志目录存在于相对路径/application_%{appid}中。单独容器的日志目录,即container_{$contid},是该路径下的子目录。每个容器目录都含容器生成的stderr、stdin及syslog文件。要新增目录,比如新增/srv/BigData/yarn/data2/nm/containerlogs目录,应首先删除/srv/BigData/yarn/data2/nm/containerlogs下的文件。之后,为/srv/BigData/yarn/data2/nm/containerlogs赋予跟/srv/BigData/yarn/data1/nm/containerlogs一样的读写权限,再将/srv/BigData/yarn/data1/nm/containerlogs修改为/srv/BigData/yarn/data1/nm/containerlogs,/srv/BigData/yarn/data2/nm/containerlogs。可以新增目录,但不要修改或删除现有目录。否则,NodeManager的数据将丢失,且服务将不可用。

    【默认值】%{@auto.detect.datapart.nm.logs}

    【注意】请谨慎修改该项。如果配置不当,将造成服务不可用。当角色级别的该配置项修改后,所有实例级别的该配置项都将被修改。如果实例级别的配置项修改后,其他实例的该配置项的值保持不变。

    %{@auto.detect.datapart.nm.logs}

    yarn.nodemanager.local-dirs

    本地化后的文件的存储位置。默认值为%{@auto.detect.datapart.nm.localdir}。如果有数据分区,基于该数据分区生成一个类似/srv/BigData/hadoop/data1/nm/localdir,/srv/BigData/hadoop/data2/nm/localdir的路径清单。如果没有数据分区,生成默认路径/srv/BigData/yarn/data1/nm/localdir。除了使用表达式以外,还可以输入完整的路径清单,比如/srv/BigData/yarn/data1/nm/localdir或/srv/BigData/yarn/data1/nm/localdir,/srv/BigData/yarn/data2/nm/localdir。这样数据就会存储在所有设置的目录中,一般会是在不同的设备中。为保证磁盘IO负载均衡,需要提供几个路径且每个路径都对应一个单独的磁盘。应用程序的本地化后的文件目录存在于相对路径/usercache/%{user}/appcache/application_%{appid}中。单独容器的工作目录,即container_%{contid},是该路径下的子目录。要新增目录,比如新增/srv/BigData/yarn/data2/nm/localdir目录,应首先删除/srv/BigData/yarn/data2/nm/localdir下的文件。之后,为/srv/BigData/hadoop/data2/nm/localdir赋予跟/srv/BigData/hadoop/data1/nm/localdir一样的读写权限,再将/srv/BigData/yarn/data1/nm/localdir修改为/srv/BigData/yarn/data1/nm/localdir,/srv/BigData/yarn/data2/nm/localdir。可以新增目录,但不要修改或删除现有目录。否则,NodeManager的数据将丢失,且服务将不可用。

    【默认值】%{@auto.detect.datapart.nm.localdir}

    【注意】请谨慎修改该项。如果配置不当,将造成服务不可用。当角色级别的该配置项修改后,所有实例级别的该配置项都将被修改。如果实例级别的配置项修改后,其他实例的该配置项的值保持不变。

    %{@auto.detect.datapart.nm.localdir}