文章目录

  • ​​配置NodeManager​​
  • ​​配置 Container​​
  • ​​配置 mapTask reduceTask​​
  • ​​配置ApplicationMaster​​
  • ​​vcores 什么意思​​
  • ​​其它常用参数​​
  • ​​mapred-site.xml​​
  • ​​yarn-site.xml​​

配置NodeManager

yarn-site.xml

<property>
<name>yarn.nodemanager.resource.cpu-vcores</name>
<value>10</value>
<discription>每个nodemanager可分配的cpu总核数,默认8个</discription>
</property>

<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>10240</value>
<discription>每个nodemanager可分配的内存总量,默认8g</discription>
</property>

​建议:​

  1. cpu核数=逻辑核数 - 其他应用数
  2. 内存 :cpu(1 : 1)
  3. 查看集群的逻辑核数命令
cat /proc/cpuinfo | grep "processor" | wc -l

配置 Container

​容器的个数计算公式:​​每个nodemanager可分配的内存总量 / 每个container可申请的最小的内存

yarn-site.xml

​如果提示物理内存溢出,提高这个值即可​

<property>
<name>yarn.scheduler.minimum-allocation-mb</name>
<value>1024</value>
<discription>单个任务运行在容器当中,每个container可申请的最小的内存,默认1024MB</discription>
</property>

<property>
<name>yarn.scheduler.maximum-allocation-mb</name>
<value>8192</value>
<discription>单个任务运行在容器当中,每个container可申请最大的内存,默认8192MB</discription>
</property>


<property>
<name>yarn.scheduler.minimum-allocation-vcores</name>
<value>1</value>
<discription>单个任务运行在容器当中,container可申请的最小虚拟CPU个数,默认1个</discription>
</property>

<property>
<name>yarn.scheduler.maximum-allocation-vcores</name>
<value>8</value>
<discription>单个任务运行在容器当中,container可申请的最多虚拟CPU个数,默认4个</discription>
</property>

​注意:​​ 单个Container分配的资源要小于单个NodeManager

配置 mapTask reduceTask

mapred-site.xml

​资源配比最好遵循:​

  1. reduceTask申请的资源值=mapTask*2
  2. mapreduce.map.java.opts的值=mapreduce.map.memory.mb的值 *0.75,reduce.java.opts同样也是
<property>
<name>mapreduce.map.memory.mb</name>
<value>1024</value>
<discription> mapTask 从容器中可以请求的最大内存数量,如果未指定或为非正数,则从 mapreduce.map.java.opts 和mapreduce.job.heap.memory-mb.ratio这2个参数中推断出来,如果也没有指定java-opts,则默认设置为1024</discription>
</property>

<property>
<name>mapreduce.reduce.memory.mb</name>
<value>4096</value>
<discription> mapTask 从容器中可以请求的最大内存数量,如果未指定或为非正数,则从 mapreduce.map.java.opts 和mapreduce.job.heap.memory-mb.ratio这2个参数中推断出来,如果也没有指定java-opts,则默认设置为1024</discription>
</property>

<property>
<name>mapreduce.map.java.opts</name>
<value>-Xmx1536M</value>
<discription>mapTask的运行是在容器当中,容器的创建需要启动jvm,jvm的创建需要堆内存。这个参数来控制最大堆内存数</discription>
</property>

<property>
<name>mapreduce.reduce.java.opts</name>
<value>-Xmx3147M</value>
<discription> reduceTask 的运行是在容器当中,容器的创建需要启动jvm,jvm的创建需要堆内存。这个参数来控制最大堆内存数</discription>
</property>

​注意:​

  1. mapreduce.map.memory.mb和mapreduce.reduce.memory.mb的值能被yarn.scheduler.minimum-allocation-mb整除
  2. 如果MapTask实际使用的资源量超过上述配置的值,则会被强制杀死;ReduceTask也一样

配置ApplicationMaster

mapred-site.xml

<property>
<name>yarn.app.mapreduce.am.resource.cpu-vcores</name>
<value>1</value>
<discription>ApplicationMaster使用的cpu核数,默认1个</discription>
</property>

<property>
<name>yarn.app.mapreduce.am.resource.mb</name>
<value>1024</value>
<discription>ApplicationMaster的占用的内存大小,默认1536</discription>
</property>

​建议:​​cpu和内存比例,最好和 NodeManager 的分配比例保持一致

vcores 什么意思

vcores 是​​虚拟 ​​​CPU,考虑到不同节点的CPU性能可能不同,​​每个CPU具有的计算能力不一样​​,比如某个物理CPU的计算能力可能是另外一个物理CPU的2倍,这时候,你可以通过为第一个物理CPU多配置几个虚拟CPU弥补这种差异。用户提交作业时,可以指定每个任务需要的虚拟CPU个数

其它常用参数

mapred-site.xml

Shuffle相关的

mapreduce.task.io.sort.mb

环形缓冲区大小,默认100m

Shuffle相关的

mapreduce.map.sort.spill.percent

环形缓冲区溢出的阈值,默认80%

Shuffle相关的

mapreduce.task.io.sort.factor

在Map 任务完成前,所有的spill 文件将会被归并排序为一个索引文件和数据文件。这是一个多路归并过程,最大归并路数由io.sort.factor 控制(默认是10)

ReduceTask

mapreduce.reduce.shuffle.input.buffer.percent

ReduceTask拉取过来的数据先缓存到内存,内存中的数据达到多少比例开始写入磁盘。默认值0.7

ReduceTask

mapreduce.reduce.input.buffer.percent

ReduceTask的Buffer占堆内存的大小,默认值是0.0

容错相关参数

mapreduce.map.maxattempts

每个MapTask最大重试次数,一旦重试参数超过该值,则认为MapTask运行失败,默认值:4

容错相关参数

mapreduce.reduce.maxattempts

每个ReduceTask最大重试次数,一旦重试参数超过该值,则认为MapTask运行失败,默认

容错相关参数

mapreduce.task.timeout

如果一个Task在一定时间内没有任何进入,既不会读取新的数据,也没有输出数据,则认为该Task处于Block状态,可能是卡住了,也许永远会卡住,为了防止因为用户程序永远Block住不退出,则强制设置了一个该超时时间(单位毫秒),默认是600000。如果你的程序对每条输入数据的处理时间过长(比如会访问数据库,通过网络拉取数据等),建议将该参数调大

yarn-site.xml

虚拟内存相关的

yarn.nodemanager.vmem-check-enabled

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

虚拟内存相关的

yarn.nodemanager.vmem-pmem-ratio

虚拟内存和物理内存设置比例,默认2.1

调度器相关的

yarn.resourcemanager.scheduler.class

选择哪个调度器,apache,默认容量

Resourcemanager相关的

yarn.resourcemanager.scheduler.client.thread-count

客户端连接resourcemanager,resourcemanager负责接待客户端的线程数,默认50;如果提交的任务数大于50,可以增加该值,但是不能超过3台 * 4线程 = 12线程(去除其他应用程序实际不能超过8)

NodeManager(每个NodeManager单独配置)(假设3个节点,node1使用的cpu为i7,node2为i3,node3为i3,想把node2,node3的cpu的2核心做为一核心来用,来匹配i7的一核)心)

yarn.nodemanager.resource.count-logical-processors-as-cores

是否将虚拟核数当作CPU核数,默认是false,采用物理CPU核数

NodeManager(每个NodeManager单独配置)(假设3个节点,node1使用的cpu为i7,node2为i3,node3为i3,想把node2,node3的cpu的2核心做为一核心来用,来匹配i7的一核)

yarn.nodemanager.resource.pcores-vcores-multiplier

虚拟核数和物理核数乘数,默认是1.0。若为2,则意思是将2个cpu物理核数作为一个