Hadoop 1.2.1 Slave节点TaskTracker无法启动问题排查求助
嘿,我帮你定位到TaskTracker启动失败的核心原因了,咱们一步步来看:
环境信息
- Hadoop版本:1.2.1
- JDK版本:
java version "1.8.0_111" Java(TM) SE Runtime Environment (build 1.8.0_111-b14) Java HotSpot(TM) 64-Bit Server VM (build 25.111-b14, mixed mode) - 操作系统:
Linux version 2.6.32-642.el6.x86_64 (mockbuild@worker1.bsys.centos.org) (gcc version 4.4.7 20120313 (Red Hat 4.4.7-17) (GCC) ) #1 SMP Tue May 10 17:27:01 UTC 2016
关键错误现象
从你的日志里能看到明确的报错:
2018-01-24 17:20:33,053 ERROR org.apache.hadoop.security.UserGroupInformation: 以root身份执行PriviledgedAction时出现异常,原因:org.apache.hadoop.ipc.RemoteException: java.io.IOException: NameNode无法识别协议:org.apache.hadoop.mapred.InterTrackerProtocol
...
2018-01-24 17:20:33,054 ERROR org.apache.hadoop.mapred.TaskTracker: 无法启动task tracker
问题根源
在Hadoop 1.2.1中,**NameNode(HDFS元数据服务)和JobTracker(MapReduce调度服务)**是两个独立的服务,使用不同的IPC端口:
- NameNode默认端口是8020(对应
core-site.xml里的fs.default.name) - JobTracker默认端口是9001(对应
mapred-site.xml里的mapred.job.tracker)
而你的mapred-site.xml错误地把mapred.job.tracker指向了NameNode的8020端口,导致TaskTracker试图向NameNode发送MapReduce专属的InterTrackerProtocol请求——NameNode根本不认识这个协议,自然就拒绝了,最终导致TaskTracker启动失败。
修复步骤
修改
mapred-site.xml配置
将mapred.job.tracker的端口改为JobTracker的正确端口(默认是9001,如果Master节点自定义过JobTracker端口,要对应修改):<configuration> <property> <name>mapred.job.tracker</name> <value>192.168.79.129:9001</value> </property> </configuration>确认Master节点的JobTracker已启动
在Master节点执行jps命令,检查是否存在JobTracker进程:jps如果没有启动,先启动JobTracker:
$HADOOP_HOME/bin/hadoop-daemon.sh start jobtracker重启Slave节点的TaskTracker
在hslave01上执行:$HADOOP_HOME/bin/hadoop-daemon.sh stop tasktracker $HADOOP_HOME/bin/hadoop-daemon.sh start tasktracker验证启动状态
查看TaskTracker日志确认是否成功启动:tail -f $HADOOP_HOME/logs/hadoop-root-tasktracker-hslave01.log正常启动的话会看到类似
TaskTracker已启动,地址:xxx的日志信息。
内容的提问来源于stack exchange,提问作者J John

