0.20.2 作业内存控制策略分析(3)

3. JobTracker作业内存使用控制

3.1 JobTracker控制task内存使用方法

JobTracker:如果: mapred.job.map.memory.mb > mapred.cluster.max.map.memory.mb,则直接跑出异常,告诉client提交作业的内存不合法

3.2 JobTracker上相关类方法

initializeTaskMemoryRelatedConfig:初始化内存相关的配置变量

checkMemoryRequirements:判断某个作业内存使用量是否超出限制

4. Capacity Scheduler

Capacity Scheduler较其他Hadoop Scheduler,如FIFO或者Fair Scheduler,最大的好处之一是可以根据作业的内存需求量进行调度。核心思想是:用户提交作业时,指定作业的每个task预期使用内存量,然后根据该内存量计算出对应的slot数,这当该作业的某个task在某个TaskTracker执行时,一次性占用多个slot。

该调度器解决了Hadoop本身设计的一个缺陷,即:作业调度完全按照slot数来,如果有20个slot,则会同时有20个task执行。一般而言,slot对应CPU数,也就是说,调度器完全按照cpu资源调度,并没有考虑到内存,网络IO等资源。

5. 相关的Hadoop patch

Hadoop与task内存等资源控制相关的patch有三个:

(1) MAPREDUCE-1218:TaskTracker通过Heartbeat向jobtracker汇报自己可用的内存和cpu使用率。

(2) MAPREDUCE-220:TaskTracker收集自身每个task的内存和cpu使用量,并通过hearteat汇报给JobTracker

(3) MAPREDUCE-2037:TaskTracker收集自身的内存和cpu负载,并通过HeatBeat告诉JobTracker

另外,其他资源的收集,如网络IO和磁盘IO的收集的必要性和可行性,见:https://issues.apache.org/jira/browse/MAPREDUCE-220

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/619ca1ab991261d77b599b79539758bf.html