大数据技术入门(第2版)
上QQ阅读APP看书,第一时间看更新

3.5 集群配置文件总览

在本章的最后,我们把一些常用参数按照配置文件来逐个列出,供读者快速查阅和使用。

3.5.1 yarn-site.xml

常用参数如下:

     yarn.resourcemanager.webapp.address

说明:Resource Manager对外的Web UI地址。用户可通过这个地址在浏览器中查看集群各类信息。

默认值:${yarn.resourcemanager.hostname}:8088

实例:

说明:Resource Manager的主机名(hostname)。

实例:

说明:启用的资源调度器主类。目前可用的有FIFO、Capacity Scheduler和Fair Scheduler。

默认值:

     Org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacitySch
eduler

实例:

说明:单个容器可申请的最小与最大内存,应用在申请内存时不能超过最大值,小于最小值则分配最小值,从这个角度看,最小值有点像操作系统中的页。最小值还有另外一种用途,计算一个节点的最大Container数目。这两个值一经设定不能动态改变(此处所说的动态改变是指应用运行时)。

默认值:1024/8192

实例:

说明:单个任务可申请的最小/最大虚拟CPU个数。例如设置为1和4,则运行一个作业时,每个任务最少可申请1个虚拟CPU,最多可申请4个虚拟CPU。

默认值:1/32

     yarn.resourcemanager.nodes.exclude-path

说明:Node Manager黑名单。如果发现若干个Node Manager存在问题,例如故障率很高,任务运行失败率高,则可以将之加入黑名单中。注意,这个配置参数可以动态生效(调用一个refresh命令即可)。

默认值:""

实例:

说明:每个节点可用的最大内存,Resource Manager中的两个值不应该超过此值。此数值可以用于计算Container最大数目,也即是用此值除以Resource Manager中的最小容器内存。虚拟内存率,是指每使用1MB物理内存,最多可用的虚拟内存数,默认值为2.1倍。注意:第一个参数是不可修改的,一旦设置,整个运行过程中不可动态修改,且该值的默认大小是8GB,即使计算机内存不足8GB也会按着8GB内存来使用。

默认值:8GB/2.1

实例:

说明:Node Manager可用虚拟CPU总的个数。

默认值:8

实例:

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

默认值:${yarn.log.dir}/userlogs

实例:

说明:Node Manager上运行的附属服务。需配置成mapreduce_shuffle,才可运行MapReduce程序。

实例:

3.5.2 mapred-site.xml

     mapreduce.job.name

说明:作业名称

     mapreduce.job.priority

说明:作业优先级

默认:NORMAL

     yarn.app.mapreduce.am.resource.mb

说明:MapReduce应用程序主控器(Application Master)占用的内存量

默认:1536

     yarn.app.mapreduce.am.resource.cpu-vcores

说明:MapReduce应用程序主控器(Application Master)占用的虚拟CPU个数

默认:1

     mapreduce.am.max-attempts

说明:MapReduce应用程序主控器(Application Master)失败尝试的足最大次数

默认:2

     mapreduce.map.memory.mb

说明:每个Map Task需要的内存量

默认:1024

     mapreduce.map.cpu.vcores

说明:每个Map Task需要的虚拟CPU个数

默认:1

     mapreduce.map.maxattempts

说明:Map Task失败尝试的最大次数

默认:4

     mapreduce.reduce.memory.mb

说明:每个Reduce Task需要的内存量

默认:1024

     mapreduce.reduce.cpu.vcores

说明:每个Reduce Task需要的虚拟CPU个数

默认:1

     mapreduce.reduce.maxattempts

说明:Reduce Task失败尝试的最大次数

默认:4

     mapreduce.map.speculative

说明:是否对Map Task启用推测执行机制

默认:false

     mapreduce.reduce.speculative

说明:是否对Reduce Task启用推测执行机制

默认:false

     mapreduce.job.queuename

说明:作业提交到的队列

默认:default

     mapreduce.task.io.sort.mb

说明:任务内部排序缓冲区的大小

默认:100

     mapreduce.map.sort.spill.percent

说明:Map阶段溢写文件的阈值(排序缓冲区大小的百分比)

默认:0.8

     mapreduce.reduce.shuffle.parallelcopies

说明:Reduce Task启动的并发复制数据的线程数目

默认:5

以MapReduce为例,我们来看一下Application Master内存配置的相关参数。这两个值是Application Master特性,在mapred-site.xml中配置如下:

     mapreduce.map.memory.mb
     mapreduce.reduce.memory.mb

这两个参数指定用于MapReduce的两个任务(Map Task、Reduce task)的内存大小,其值应该在Resource Master中的最大最小Container之间。如果没有配置则通过如下简单公式获得:

     max(MIN_CONTAINER_SIZE, (Total Available RAM) / containers))

一般情况下,Reduce数量应该是Map数量的2倍。上述这两个值可以在应用程序启动时通过参数来改变。另外,可以运行如下的每个Slave:

     map的数量<=
     yarn.nodemanager.resource.memory-mb /mapreduce.map.memory.mb
     reduce的数量<=
     yarn.nodemanager.resource.memory-mb /mapreduce.reduce.memory.mb

Application Master中其他与内存相关的参数还有JVM相关的参数,这些参数可以通过如下选项进行配置:

     mapreduce.map.java.opts
     mapreduce.reduce.java.opts

这两个参数主要是为运行JVM程序(Java、Scala等)准备的,通过这两个设置可以向JVM中传递与内存有关的参数是-Xmx和-Xms等选项。此数值的大小应该在Application Master中的map.mb和reduce.mb之间。

总之,当配置YARN内存的时候,我们主要是配置有三个方面:每个Map和Reduce可用物理内存的限制;对于每个任务的JVM大小的限制;虚拟内存的限制。下面通过一个具体错误实例来进行说明,错误如下:

     Container[pid=41884,containerID=container_1405950053048_0016_01_000284] is
running beyond virtual memory limits. Current usage: 314.6 MB of 2.9 GB physical memory used; 8.7 GB of 6.2 GB virtual memory
used. Killing container.

配置如下:

上述配置指定了容器的最小内存和最大内存分别为:3GB和10GB,而Reduce设置的默认值2GB,Map没有设置,所以两个值均为3GB,也就是log中的“2.9 GB physical memory used”。而由于使用了默认虚拟内存率(也就是2.1倍),因此Map Task和Reduce Task总的虚拟内存都为3000*2.1=6.2GB。而应用程序的虚拟内存超过了这个数值,故报错。解决办法是在启动YARN时调节虚拟内存率或者在应用程序运行时调节内存大小。