手机版
你好,游客 登录 注册
背景:
阅读新闻

Hadoop-0.20.2 作业内存控制策略分析

[日期:2012-06-19] 来源:dongxicheng.org  作者:dongxicheng [字体: ]

2. TaskTracker作业内存使用控制

2.1 TaskTracker控制task内存使用方法

TaskTracker从单个task内存使用量和所有task整体内存使用量上进行内存控制。

(1) 单个task控制

满足两个两个条件之一时,则任务该task超过了内存相知,直接杀死:

[1] 某个时刻满足:currentMemUsage > (2*mapred.cluster.max.map.memory.mb),这个条件主要是考虑到调用fork()瞬间,内存会变为父进程的两倍。

或者

[2] 相邻时间间隔内(默认是5s)两次检测到内存使用量超过mapred.cluster.max.map.memory.mb

(2) 总体控制

除了从单个task上控制内存使用,还是总体上控制。TaskTracker会周期性计算当前正在运行的task所占用的总内存数,如果超过可用内存总数,则选择适当task杀掉,直到内存使用量降到安全线以下。

[1] 定义两个变量

maxMemoryAllowedForAllTasks:为该TaskTracker所有可用内存

maxMemoryAllowedForAllTasks = maxCurrentMapTasks * mapSlotMemorySizeOnTT + maxCurrentReduceTasks * reduceSlotSizeMemoryOnTT;

memoryStillInUsage:该TaskTracker上正在运行的task占有的内存总量

[2] 变量解释

maxCurrentMapTasks为该TaskTracker上配置的map slot个数(由mapred.tasktracker.map.tasks.maximum指定),maxCurrentReduceTasks类似。

mapSlotMemorySizeOnTT即为mapred.cluster.map.memory.mb,reduceSlotSizeMemoryOnTT类似

[3] 判断标准

如果memoryStillInUsage > maxMemoryAllowedForAllTasks,则选择task杀掉,选择策略是:总是选择最近启动的task,将其杀掉,直到memoryStillInUsage <= maxMemoryAllowedForAllTasks

2.2 TaskTracker上相关类

(1) TaskMemoryManagerThread:后台线程,管理某个TaskTracker上所有task内存使用情况,如果有task超出内存使用,则将其杀掉。位于TaskMemoryManagerThread.java中

(2) ProcfsBasedProcessTree:从linux虚拟文件系统/proc/中获取ProcessTree,主要是进程之间的树关系。 位于ProcfsBasedProcessTree.java中,且该类仅适用于linux操作系统。

(3) LinuxMemoryCalculatorPlugin:计算TaskTracker上资源使用情况,包括进程所用内存,cpu资源量,cpu数目等。位于LinuxMemoryCalculatorPlugin.java中,且该类仅适用于linux操作系统。

(4) TaskTracker:启动TaskMemoryManagerThread线程,并把LinuxMemoryCalculatorPlugin计算得到的资源情况通过HeartBeat发送给JobTracker。

linux
相关资讯       Hadoop部署 
本文评论   查看全部评论 (0)
表情: 表情 姓名: 字数

       

评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款