HDP 2.2 ( Hadoop 2.6 ) 集群的内存参数配置和参数调优 (Yarn/MapReduce2)

原创 2015年07月09日 17:19:55


近期在根据集群上的各节点的物理机配置对集群的内存参数进行调整。  因此较系统的学习了一下hadoop里对资源调配的各组件的相关参数的含义。 作为示例的配置集群版本是2.6, hortonworks 2.2. 


首先要理解, hadoop 中 yarn 作为资源管理器, 起到一个底层的控制调配运算资源的作用。   yarn中资源的最小单位是container。 一个container 可以近似认为是一个运行的jvm。 

一个yarn集群中,有一个ResourceManager (中控的进程,可以存在于集群中的任何节点上), 还有若干个node manager (每个节点host 上有 一个node manager)每个node manager 管理一个到多个container。 

对于较小规模的hadoop集群, resource manager 和node manager可以并存于一个host上。 


因此yarn中配置的参数主要有如下几个。 

1. 在每个node manager一共有多少内存和cpu

yarn.node-manager.resource.memory-mb =117000

yarn.node-manager.resource.vcore=20

yarn.nodemanager.vmem-pmem-ratio=2.1

对于集群中不同硬件配置的节点, 上述两个配置可以根据物理机的实际配置来写。  注意的是, 必须给物理机留一些内存和计算资源给到操作系统使用不能用光。 建议这里的物理机配置到整个内存的80-90%左右。 我的节点的物理机为128GB 内存, 我这里配置了117GB. 

第三个是物理内存和虚拟 内存的比例。 后面会解释怎么用。 

2. 每个container的分配多少内存和cpu

当应用程序向resource manager 申请资源(即申请container )时, RM分配给一个container 多大的内存是按照一个最小单位进行分配的。 例如, 我们设置分配的最小单位为4GB, 则RM分配出来的container的内存一定是4G的倍数。  假设现在有一个程序向RM申请 5.1G的内存, 则RM会分配给它一个8GB的container去执行。 

yarn.scheduler.minimum-allocation-mb=4096

在实际执行map reduce的job中, 一个container实际上是执行一个map 或者reduce task的jvm的进程。 那么这个jvm在执行中会不断的请求内存,假设它的物理内存或虚拟内存占用超出了container的内存设定, 则node manager 会主动的把这个进程kill 掉。  这里需要澄清一点, JVM使用的内存实际上分为虚拟内存和物理内存。  JVM中所有存在内存中的对象都是虚拟内存, 但在实际运行中只有一部分是实际加载在物理内存中的。 我们使用linux的top 可以看到 VM, RES,    前者是虚拟内存,后者可以看成近似是实际占用的物理内存。 因此在设置mapreduce的task的 jvm opts 参数时, 应将heap size 设置的比container允许的最大虚拟内存小。 这样jvm 不会因为申请过多的内存而被node manager 强制关闭。 当然设置最大heap size 如果在执行中被超过, jvm就会报 OutOfMemoryException。 

同时还有一个参数,设定了RM可以分配的最大的container是多大。   假设应用程序向RM申请的资源超过了这个值, RM会直接拒绝这个请求。 

yarn.scheduler.maximum-allocation-mb


除了设置Yarn, 还需要设置mapreduce2

mapreduce2 是hadoop 上实际执行计算的引擎。 因此我们在前面所说的“应用程序”向yarn请求资源, 这里应用程序就是指mapreduce2 这个引擎。 mapreduce2 在逻辑上有几个概念: 一个job, 一个由app master 以及若干个 map task 和reduce task组成。  app master 负责向 Yarn的RM申请资源, 并将map 和reduce task 送到分配到的container去执行。 

mapreduce中可以设定 map task的默认使用的虚拟内存。  这个值是app master 在向 yarn申请用于map task的container时会使用的内存值。 

mapreudce.map.memory.mb=8192

mapreudce.reduce.memory.mb=8192

这个值是全局的, 这里可以看到mapreduce并不是很智能的, 他不知道某个job的map task需要使用多大的内存。 这个值应该根据集群大多数任务的特征来设定。  但是在我们执行一些需要很大内存的job的时候,可以在提交job时手工的overwrite这些参数。

另外,mapreduce2中还可以设置每个map、reduce task的子jvm进程的heapsize。  这个值应该比上面的task的虚拟内存值小(因为jvm除了heap还有别的对象需要占用内存), 如果jvm进程在执行中heap上的对象占用内存超过这个值, 则会抛出OutOfMemory Exception

mapreduce.map.java.opts=-Xmx7129m

mapreduce.reduce.java.opts=-Xmx7129m


一个典型的内存分配的流程

1. 用户提交hive sql

2. hive 将sql 翻译成若干map reduce job

3. mapreduce2  根据map task的默认内存分配, 向 yarn 申请资源。 

4. yarn 根据申请的资源大小,以及目前各node manager 当前可用的内存和cpu core 来决定 创建多大的container ,并分配给mapreduce2 的job


在container的执行过程中nodemanager 会定期检查每个container (及其所有子进程)的内存使用,包括物理的和虚拟的。 如果超出设定值, 则会强制杀掉该container。 那么这时这个mapreduce一定会fail。 

解决的方法是, 在启动job时, 设置 mapreduce.map.memory.mb 、 mapreduce.reudce.memory.mb为一个更大的值,  mapreduce2也会向yarn申请更大的container。 

但是这个值是否越大越好呢 ? 不是。 这个值越大,会导致单个container的内存变多,虽然实际使用过程中用不到,但是可分配的container就变少了。 

适当的调小这个值,会使单个container所需的内存变小,因此集群会创建更多的container来执行任务,增加了并发度。更充分的利用节点 上的磁盘和cpu资源。












相关文章推荐

Hadoop/Yarn/MapReduce内存分配(配置)方案

以horntonworks给出推荐配置为蓝本,给出一种常见的Hadoop集群上各组件的内存分配方案。方案最右侧一栏是一个8G VM的分配方案,方案预留1-2G的内存给操作系统,分配4G给Yarn/Ma...

ambari_HDP之mapreduce参数调优

参考测试集群ambari_HDP的MapReduce重要配置参数配置及说明。

hadoop内存大小设置问题

前面博客里面提到,运行一次hadoop的时候出现java heap error。字面意思分配堆的时候出现错误,我们知道应用程序的动态内存的分配均在堆里面。这里提示堆错误,那必然是内存不够用了。那么这个...

Hadoop YARN中内存的设置

在YARN中,资源管理由ResourceManager和NodeManager共同完成,其中,ResourceManager中的调度器负责资源的分配,而NodeManager则负责资源的供给和隔离。R...

Yarn 内存分配管理机制及相关参数配置

理解Yarn的内存管理与分配机制,对于我们搭建、部署集群,开发维护应用都是尤为重要的,对于这方面我做了一些调研供大家参考。 一、相关配置情况 关于Yarn内存分配与管理,主要涉及到了ResourceM...

Hadoop的内存配置

Hadoop的内存配置有两种方法:利用手动安装hadoop的帮助脚本;手动计算yarn和mapreduce内存大小进行配置.此处只记录脚本计算方法: 用wget命令从hortonworks上下载脚本 ...

Hadoop的内存配置

Hadoop的内存配置有两种方法:利用hadoop手动安装的帮助脚本;手动计算yarn和mapreduce内存大小进行配置; 第一种方法: 用wget命令从hortonworks上下载脚本 Wg...

How to Plan and Configure YARN and MapReduce 2 in HDP 2.0 如何配置YARN

本人主要讲述如何在一个现有的系统下,配置YARN,这样让整个系统的执行效率更高 主要有Reducer的配置数目,每个Reducer可以使用的资源,包括内存和核心 As part of HDP...

一次hadoop集群机器加内存的运维过程

由于前期的集群规划问题,导致当前Hadoop集群中的硬件并没有完全利用起来。当前机器的内存CPU比例为2G:1core,但一般的MapReduce任务(数据量处理比较大,逻辑较复杂)的MR两端都需要将...
  • clamaa
  • clamaa
  • 2017年04月11日 09:55
  • 559

hadoop参数配置优化

转载自  三江小渡 http://blog.pureisle.net/archives/1956.html 由于最近一直忙于项目的开发,所以很多配置大致进行了一下测试,具体的数据并没有统计,...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:HDP 2.2 ( Hadoop 2.6 ) 集群的内存参数配置和参数调优 (Yarn/MapReduce2)
举报原因:
原因补充:

(最多只允许输入30个字)