设为首页 收藏本站
查看: 2101|回复: 0

[经验分享] (转)hadoop的task运行完成后清理local目录影响性能

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-7-16 09:17:17 | 显示全部楼层 |阅读模式
  link:http://blog.iyunv.com/ae86_fc/article/details/5284282
  当launch一个job到hadoop 集群,hadoop集群中的 TaskTracker(TT),在从一次heartbeat中接收到 JobTracker(JT)的cmd后,TT会在自己本地机器上运行一些task进程,以完成这个job的某些部分的数据 处理。在task运行过程中,或者 运行完成后,总是会或多或少的产生一些中间结果,或者jobCache的数据,这些数据通常都需要向TT的本地文件 系统 中写,写这些数据的目录是通过 hadoop的TT进程启动时在 hadoop-site.xml 中的 mapred.local.dir 选项来决定的。比如该配置选项如下:

mapred.local.dir
/disk10/mapred/local,/disk11/mapred/local,/disk12/mapred/local,/disk13/mapred/local,/disk14/mapred/local

那么其实这个TT的所有task,就有5个mapred的local目录写入点可供选择,通常每个 task运行之前,会从这些写入点中轮询的选择下一个,然后该task的中间结果等数据就往这个目录下写。写入的时候也不是直接就写到 这些写入点的根下去了,而是根据该task所属的jobid,taskid来创建相应的目录,并往这些目录中写。因为如果不这样,那么许多的task往写入点的根下写数据,并且文件名一样,就会乱了套了。在写入点中的对应的jobid和taskid创建的目录结构,TT的创建策略可以从其代码中看出来:
static String getLocalTaskDir(String jobid,
String taskid,
boolean isCleanupAttempt) {
String taskDir = getLocalJobDir(jobid) + Path.SEPARATOR + taskid;
if (isCleanupAttempt) {
taskDir = taskDir + ".cleanup";
}
return taskDir;
}
static String getLocalJobDir(String jobid) {
return getJobCacheSubdir() + Path.SEPARATOR + jobid;
}
static String getJobCacheSubdir() {
return TaskTracker.SUBDIR + Path.SEPARATOR + TaskTracker.JOBCACHE;
}

TaskTracker.SUBDIR = "taskTracker"
Path.SEPARATOR = “/”
TaskTracker.JOBCACHE = “jobcache”
所以,加入某个task得到的local写入点是 /disk10/mapred/local,那么它真正的local写入目录就是 : /disk10/mapred/local/taskTracker/jobcache/${jobid}/${taskid}/
这里要讲的是:当一个TT运行的时间非常的长,那么在其各个写入点下的临时文件或者垃圾文件就会越来越多,当这些数据越来越多,文件和目录越来越多时,TT和其上面运行的tasks就会受到影响,而致使job越来越慢。究其根源,可以在TT的源码中发现,其中有一个cleanup(boolean)的方法,这个方法用来对写入点下的临时文件和中间结果文件进行清理。但是问题在于,居然有两个方法在调用它,分别是:
startNewTask和 taskFinished(),也就是说,每当有一个task在TT上启动 ,或者每当有一个task运行结束,都会调用这个cleanup方法,而当TT运行时间太长时,这个cleanup的操作就会越来越慢,这就是导致通常的 hadoop集群总是会越跑越慢的原因之一。
找到了问题的根源,解决 起来就比较好办了,在startNewTask()和 taskFinished() 方法的时候,不调用cleanup() 方法,以节省task启动的开销,并在TT中启动一个专门用来清理这些数据目录的线程,在可配置的时间内,如果某些目录和文件的创建和修改时间超过了某个阈值,就删除这些目录和文件,问题就可以解决。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-87155-1-1.html 上篇帖子: 五个最给力的Hadoop项目 下篇帖子: linux下hadoop伪分布模式安装
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表