对于Hadoop而言,对作业使用资源量进行限制是非常重要的,这可以防止一些有问题的作业因耗掉集群中大量资源而干扰其他正常作业。本文主要分析了Hadoop-0.20.2中作业内存控制相关策略,包括怎样启用Hadoop作业内存使用量控制功能,Hadoop怎样实现作业内存控制等。
1. 内存相关配置项
(1) 配置内存计算插件
<property>
<name> mapred.tasktracker.memory_calculator_plugin</name>
<value>org.apache.hadoop.util.LinuxMemoryCalculatorPlugin</value>
</property>
(2) 配置限制内存的一些参数
mapred.cluster.map.memory.mb 每个map slot预留的内存
mapred.cluster.reduce.memory.mb 每个reduce slot预留的内存
以上两个选项用于计算taskTracker上可用内存
mapred.cluster.max.map.memory.mb 每个map task使用的内存上限
mapred.cluster.max.reduce.memory.mb 每个reduce task使用的内存上限
(3) 用户可指定的作业内存参数
mapred.job.map.memory.mb 一个map任务预留的内存上限, 一个map任务可以申请多个map slot为其工作, 如果内存不足的话 mapred.job.reduce.memory.mb 一个reduce任务预留的内存上限, 一个reduce任务可以申请多个reduce slot为其工作, 如果内存不足的话
这两个参数可以动态配置,即:为不同用户指定不同内存参数。
(4) 过期的配置选项
下面几个选项已经过期,不推荐使用:
mapred.task.maxvmem
mapred.task.limit.maxvmem, 用mapred.cluster.max.map.memory.mb和mapred.cluster.max.reduce.memory.mb代替
mapred.task.default.maxvmem