以下说明均以集群中 slave 结点的配置为 48G内存,12块硬盘,12核(core) CPU 为例。

在 Yarn 中,一个 Container 是一个基础的包含内存和CPU 的单元。为了较好的平衡利用集群的资源,通常建议每块磁盘和每个core 分配1~2 个 container。所以在上面的配置下,每个结点允许最大配置 20 个 container。

我们给 yarn 分配 40G内存,另外 8G留给操作系统。40G分配给 20 个 container,所以每个 container 分配到 2个G的内存。在 yarn-site.xml 中配置如下:

<property>
    <!-- 总共有多少资源可以被分配 -->
<name>yarn.nodemanager.resource.memory-mb</name>
<value></value>
</property> <property>
    <!-- 分配给AM单个容器可申请的最小内存 -->
<name>yarn.scheduler.minimum-allocation-mb</name>
<value></value>
</property>

MapReduce2 运行在 Yarn 之上,利用 container 去安排 Map 和 Reduce 任务, 配置 MR2 的资源,需要考虑以下三个方面:

(1)每个 map 和 reduce 任务的物理内存限制

(2)每个任务的 JVM 堆大小

(3)每个任务获得的虚拟内存的总量

每个 map 和 reduce 任务运行在不同的 container 中,因此 Map 和 reduce 最大的内存配置应该等于或大于 yarn.scheduler.minimum-allocation-mb 的值。

在 mapred-site.xml 里配置:

<property>
<!-- AM 中分配给map Container的内存大小 -->
<name>mapreduce.map.memory.mb</name>
<value></value>
</property> <property>
<!-- AM 中分配给 reduce container 的内存大小,一般为 map 的两倍 -->
<name>mapreduce.reduce.memory.mb</name>
<value></value>
</property>

每个 container 均会开启 JVM , JVM 的堆大小必须小于上面 Map 和 Reduce 的 memory 的配置。因此在 mapred-site.xml 中加入下面的配置:

<property>
<name>mapreduce.map.java.opts</name>
<value>-Xmx3072m</value>
</property> <property>
<name>mapreduce.reduce.java.opts</name>
<value>-Xmx6144m</value>
</property>

上面配置了 Map 和 Reduce 使用的物理内存的上限。map 和 reduce 任务使用的虚拟内存(physical + paged memory)由 yarn container 允许的 ratio 决定。这个ratio 可以在 yarn-site.xml 中进行配置(2.1 是默认值):

<property>
<name>yarn.nodemanager.vmem-pmem-ratio</name>
<value>2.1</value>
</property>

综上所述,每个 map 任务可获得如下的内存分配:

(1) 物理 RAM = 4G

(2)map 任务的 container 的 JVM 的堆大小上限 = 3G

(3)虚拟内存上限 = 4*2.1 = 8.4G

总的来说,以 yarn.nodemanager. 开头的配置,配置的是硬件资源相关的东西, yarn.scheduler. 开头的配置,配置的是资源调度相关的,其值不能大于 yarn.nodemanager 中相关的资源限制。

最新文章

  1. java编写冒泡排序
  2. 不知道数据库中表的列类型的前提下,使用JDBC正确的取出数据
  3. Cardinality Feedback
  4. MS-DOS 7.10完整安装版(含图文安装程序)
  5. EFBaseDal新增删除方法
  6. Linux系统下快速删除某个目录下大量文件
  7. 【译】神经网络与深度学习 Ch1-Section0
  8. Struts1——从BeanUtils看struts的实现原理2
  9. drupal7创始人root忘记密码的解决办法
  10. rsync+inotify脚本
  11. vmware centos7 minimal 配置共享文件夹
  12. nginx基本用法和HTTPS配置
  13. pyqt5 设置窗口按钮等可用与不可用
  14. P1384 幸运数与排列
  15. [HDU2475]Box
  16. 全球第一开源ERP Odoo操作手册 数据库简介
  17. iOS网络NSURLConnection使用详解
  18. 理解 ajax、fetch和axios
  19. python爬虫系列:(一)、安装scrapy
  20. Moodle配置

热门文章

  1. Julia - 变量
  2. DVWA平台v1.8-反射型XSS(low级别)
  3. Python 列表学习笔录
  4. left join的多重串联与groupby
  5. python--numpy学习(一)
  6. ___pInvalidArgHandler already defined in LIBCMTD.lib(invarg.obj)
  7. JasperMES.cn JasperMES.com.cn 我的MES网站
  8. Hadoop Serialization -- hadoop序列化详解 (3)【ObjectWritable,集合Writable以及自定义的Writable】
  9. Python基础—流程控制
  10. java基础之io流总结四:字符流读写