在正式环境中,我们遇到一个这样的问题:配置更改后,需要重启JobTracker和TaskTracker节点的进程。在重启过程中,JobTracker和TaskTracker进程都很快启动完成,但是查看JobTracker的50030端口的Web管理页面时,发现JobTracker一直无法探知任何一个TaskTracker节点,大概经过10分钟后,才陆陆续续地探知完所有的TaskTracker节点。
另外,如下参数,如无说明,均为Hadoop 1.2.1版本参数。
-
重现
这个问题一直困扰着我们,并且曾经一度怀疑是Hadoop内部的机架探知比较缓慢所造成的。直到最近一次,由于运维需要移动某个TaskTracker机器的位置,需要单独重启这个TaskTracker,在重启了节点的JobTracker和DataNode进程后,发现JobTracker经过长时间也没办法探知到该节点的TaskTracker,此时的NameNode却早已成功探知到DataNode。出现问题后,尝试重新单独启动TaskTracker进程,这时,却发现探知了两个TaskTracker节点,后来才变回一个TaskTracker节点。
-
分析
为了了解究竟发生了什么问题,我们查看了JobTracker和TaskTracker的log。由于log的数量太多,这里仅仅列出关键的log。另外,关闭的TaskTracker的hostname为datanode6.dataplat.com。
首先是JobTracker的log:
2015-01-13 20:38:11,016 INFO org.apache.hadoop.mapred.JobTracker: Lost tracker 'tracker_datanode6.dataplat.com:localhost/127.0.0.1:47379'
2015-01-13 21:21:18,826 INFO org.apache.hadoop.mapred.JobTracker: Adding tracker tracker_datanode6.dataplat.com:localhost/127.0.0.1:52849 to host datanode6.dataplat.com