yarn核心配置参数说明
yarn作为hadoop的资源分配和调度的基础组件,有哪些相关的参数是和这个组件有关呢?
- ResourceManager相关
yarn.resourcemanager.scheduler.class #配置调度器,apache yarn默认容量调度器,CDH默认公平调度器
yarn.resourcemanager.scheduler.client.thread-count # ResourceManager处理调度器请求的现场数量,默认50
- NodeManager相关
yarn.nodemanager.resource.detect-hardware-capabilities #是否让yarn自己检测硬件进行配置,默认false
yarn.nodemanager.resource.count-logical-processor-as-cores #是否将虚拟核数当作CPU核数,默认false
yarn.nodemanager.resource.pcores-vcores-multiplier #虚拟核数和物理核数乘数,默认为1.0
yarn.nodemanager.resource.memory-mb # NodeManager使用内存,默认8G
yarn.nodemanager.resource.system-reserved-memory-mb #NodeManager为系统保留多少内存,以上二个参数配置一个即可
yarn.nodemanager.resource.cpu-vcores #NodeManager使用CPU核数,默认8个
yarn.nodemanager.pmem-check-enabled #是否开启物流内存检查限制container,默认打开
yarn.nodemanager.vmem-check-enabled #是否开启虚拟内存检查限制container,默认代开
yarn.nodemanager.vmem-pmem-ratio #虚拟内存物理内存比例,默认2.1
- Container相关
yarn.scheduler.minimum-allocation-mb #容器最小内存,默认1G
yarn.scheduler.maximum-allocation-mb #容器最大内存,默认8G
yarn.scheduler.minimum-allocation-vcores #容器最小CPU核数,默认1个
yarn.scheduler.maximum-allocation-vcores #容器最大CPU核数,默认4个
那在部署环境我们要怎么分配呢?
eg:3台服务器,每台配置4G内存,4核CPU,4线程,如果我们处理的是1G的文件进行数据的count统计,
那么就会有 1G/128M=8个MapTask 1个ReduceTask,1个MrAppMaster,平均下来就是每个节点有3个任务,
那我们按4 3 3 的比例分配10个任务。
那我们就按照上边的参数进行配置下我们的yarn-site.xml文件
<configuration>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop01</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 如果vmem、pmem资源不够,会报错,此处将资源监察置为false -->
<property>
<name>yarn.nodemanager.vmem-check-enabled</name>
<value>false</value>
</property>
<property>
<name>yarn.nodemanager.pmem-check-enabled</name>
<value>false</value>
</property>
<!-- 选择调度器。默认容量-->
<property>
<name>yarn.resourcemanager.scheduler.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler</value>
</property>
<!--ResourceManager处理调度器请求的现场数量,一共3*4=12,留出几个供其他使用-->
<property>
<name>yarn.resourcemanager.scheduler.client.thread-count</name>
<value>8</value>
</property>
<!--是否让yarn自动检测硬件进行配置-->
<property>
<name>yarn.nodemanager.resource.detect-hardware-capabilities</name>
<value>false</value>
</property>
<!--是否将虚拟核数当作CPU核数 默认false-->
<property>
<name>yarn.nodemanager.resource.count-logical-processors-as-cores</name>
<value>false</value>
</property>
<!--虚拟核数和物理核数乘数-->
<property>
<name>yarn.nodemanager.resource.pcores-vcores-multiplier</name>
<value>1.0</value>
</property>
<!--nodemanager使用内存数,默认8g,但是服务器只有4G,修改为4g-->
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>4096</value>
</property>
<!--nodemanager的CPU核数,默认设置为8个,但是服务器只有4核,修改为4个-->
<property>
<name>yarn.nodemanager.resource.cpu-vcores</name>
<value>4</value>
</property>
<!--容器最小内存,默认1g-->
<property>
<name>yarn.scheduler.minimum-allocation-mb</name>
<value>1024</value>
</property>
<!--容器最大内存,默认8g,但是服务器只有4G,修改为2g-->
<property>
<name>yarn.scheduler.maximum-allocation-mb</name>
<value>2048</value>
</property>
<!--容器最小CPU核数,默认1个-->
<property>
<name>yarn.scheduler.minimum-allocation-vcores</name>
<value>1</value>
</property>
<!--容器最大CPU核数,默认4个,但是服务器只有4核,修改为2个-->
<property>
<name>yarn.schedluler.maximum-allocation-vcores</name>
<value>2</value>
</property>
<!--虚拟内存和物理内存设置比例,默认2.1-->
<property>
<name>yarn.nodemanager.vmem-pmem-ratio</name>
<value>2.1</value>
</property>
</configuration>
按上边的配置修改,我们会得到最后更加符合我们服务器硬件参数的yarn资源集群。