集群hadoop 0.20 使用oozie进行任务调度,运行一段时间,jobtracker发生崩溃。
分析其原因发现jobtracker在执行oozie提交的任务时,leasechecker线程不断增加,导致jobtracker崩溃。而使用hadoop 自带的命令行提交任务,线程不会增加。因此通过多方手段确定,oozie在向hadoop提交任务时,会提交配置文件到hdfs,而jobtracker的后续某些操作会直接使用提交上来的配置文件,在提交上来的配置文件中有fs禁止使用缓存一项,这就会导致jobtracker获取fs时,不停的创建相关实例而不释放。故此解决方法较为简单,oozie提交的配置文件中,不要禁止使用缓存即可。
相关代码:
src/mapred/org/apache/hadoop/mapred/JobInProgress.java 等initTasks方法调用JobHistory方法。传递的参数就包括jobCient传递过来的。
src/mapred/org/apache/hadoop/mapred/JobHistory.java 中的logSubmitted的fs = userLogFile.getFileSystem(jobConf)