配置MapReduce内存

1. Container内存使用的监控

       NodeManager作为Yarn运行中的一个守护进程,其中一个职责是监控运行在节点上的container,通常包含每个容器的内存使用。

        为监控容器的内存使用情况,在Yarn的配置文件yarn-site.xml中配置yarn.nodemanager.container-monitor.interval-ms属性遍历当前正在运行的容器,计算进程树(process tree,即每个容器中所有的子进程),对于每个进程检查/proc/<pid>/stat文件(其中pid为容器的进程ID),抽取出物理内存(又称RSS)和虚拟内存(又称VSZ或VSIZE)。

        配置yarn-nodemanager.vmem-check-enabled控制虚拟检查是否要求打开,然后Yarn将抽取出来的容器及其子进程的VSIZE加起来和容器最大允许使用的虚拟内存进行比较。最大允许使用的虚拟内存是容器最大可使用的物理内存×yarn.nodemanager.vmem-pmem-ratio(默认值为2.1).所以,如果Yarn容器配置的最大可用物理内存为2GB,然后乘以2.1即为容器最大可用的虚拟内存4.2G。

       配置yarn.nodemanager.pmem-check-enabled属性控制物理内存检查是否被打开,然后Yarn将抽取出来的容器及其子进程的加起来和容器最大允许使用的物理内存进行比较。

        如果物理内存或者虚拟内存其中一个使用大于最大允许使用情况,Yarn会将kill该容器。并在日志打印以下日志:

Application application_1409135750325_48141 failed 2 times due to AM Container for

appattempt_1409135750325_48141_000002 exited with exitCode: 143 due to: Container

[pid=4733,containerID=container_1409135750325_48141_02_000001] is running beyond physical memory limits.

Current usage: 2.0 GB of 2 GB physical memory used; 6.0 GB of 4.2 GB virtual memory used. Killing container.

2. 增加MapReduce作业可使用的内存

       对于MapReduce作业来说,可通过以下两种方式对作业运行的内存进行配置:

       1). 设置Map和Reduce进程的物理内存;

       2.) 设置Map和Reduce进程JVM堆大小。

1)设置Map和Reduce进程的物理内存

        在map-site.xml文件中配置以下属性限制Map和Reduce进程的内存大小:

        <property>

            <name>mapreduce.map.memory.mb</name>

            <value>2048</value>

        </property>

        <property>

            <name>mapreduce.reduce.memory.mb</name>

            <value>4096</value>

        </property>

        上例中说明:配置Map进程为2G,Reduce进程为4G。

         注意:为作业配置的物理内存必须落在集群中容器允许的最小和最大内存范围中,参考:yarn.scheduler.maximum-allocation-mb和yarn.scheduler.minimum-allocation-mb两个参数。

2)设置Map和Reduce进程的JVM堆大小

          JVM堆大小需要小于进程的物理内存,一般设置为物理内存的80%.

          <property>

              <name>mapreduce.map.java.opts</name>

              <value>-Xmx1638m</value>

          </property>

          <property>

              <name>mapreduce.reduce.java.opts</name>

              <value>-Xmx3278m</value>

          </property>

          上例说明:Map的堆设置为2G,Reduce的堆大小设置为4G。

猜你喜欢

转载自amazon10.iteye.com/blog/2348082