问题现象:已经用了一段时间的hadoop环境,由于今天修改了部分信息导致出现启动后jps显示正常,但是查看日志发现jobtracker异常。
异常如下:
...
WARN org.apache.hadoop.mapred.JobTracker: Writing to file hdfs://master.hadoop:9000/home/hadoop/storage/mapred/system/jobtracker.info failed!
..
WARN org.apache.hadoop.hdfs.DFSClient: DataStreamer Exception: org.apache.hadoop.ipc.RemoteException: java.io.IOException: File /home/hduser/hadoop/tmpnew/mapred/system/jobtracker.info could only be replicated to 0 nodes, instead of 1
未成功的解决办法:
1、删除指定的目录(你的hadoop配置中指定的本地目录或临时目录),重新format,重启后还是这个错误。
2、参考网上的很多方法,包括修改iptables,关闭hadoop安全模式等,均无效果。
3、把修改的部分拼接记忆恢复,也没搞定, 可能是有部分忘记了。。。
在我想打算放弃这个环境重新搭建时,我似乎发现我犯了一个错误,在我删除目录、重新format时,我都是在namenode上删除并且只在namenode上删除,而且以前也是这么做的并且是成功的,那么是否能保证datanode目录(hadoop配置中指定的data目录会在datanode上创建)上也被删除了呢?当我ssh到datanode上时,我发现它们还存在着,于是删除集群所有机器上的指定目录,重新format,重启后竟然可以了,测试wordcount成功了。
备注:配置的目录在mapred-site.xml、hdfs-site.xml
总结:修改配置文件或者强制停止hadoop等有可能导致异常现象,这时以往的经验可能会欺骗我们,就比如重新format时大家都知道要删除旧的目录,但是如果datanode上目录因为异常而存在可能会让你掉坑里。