您的位置:首页 > 运维架构

hadoop常见错误总结

2014-05-02 09:05 169 查看

新手搞hadoop最头疼各种各样的问题了,我把自己遇到的问题以及解决办法大致整理一下先,希望对你们有所帮助。

一、hadoop集群在namenode格式化(bin/hadoop namenode -format)后重启集群会出现如下

[align=left]Incompatible namespaceIDS in ... :namenode namespaceID = ... ,datanode namespaceID=...[/align]

错误,原因是格式化namenode后会重新创建一个新的namespaceID,以至于和datanode上原有的不一致。

解决方法:

删除datanode dfs.data.dir目录(默认为tmp/dfs/data)下的数据文件
修改dfs.data.dir/current/VERSION 文件,把namespaceID修成与namenode上相同即可(log错误里会有提示)
重新指定新的dfs.data.dir目录

二、hadoop集群启动start-all.sh的时候,slave总是无法启动datanode,并会报错:

[align=left]... could only be replicated to 0 nodes, instead of 1 ...[/align]

就是有节点的标识可能重复(个人认为这个错误的原因)。也可能有其他原因,一下解决方法请依次尝试,我是解决了。

解决方法:

删除所有节点dfs.data.dir和dfs.tmp.dir目录(默认为tmp/dfs/data和tmp/dfs/tmp)下的数据文件;然后重新hadoop namenode -format 格式化节点;然后启动。
如果是端口访问的问题,你应该确保所用的端口都打开,比如hdfs://machine1:9000/、50030、50070之类的。执行#iptables -I INPUT -p tcp --dport 9000 -j ACCEPT 命令。如果还有报错:hdfs.DFSClient: Exception in createBlockOutputStream java.net.ConnectException: Connection refused;应该是datanode上的端口不能访问,到datanode上修改iptables:#iptables
-I INPUT -s machine1 -p tcp -j ACCEPT
还有可能是防火墙的限制集群间的互相通信。尝试关闭防火墙。/etc/init.d/iptables stop
最后还有可能磁盘空间不够了,请查看 df -al
我在解决这个问题的时候还有人说:先后启动namenode、datanode可以解决这个问题(本人尝试发现没用,大家可以试试)$hadoop-daemon.sh start namenode ; $hadoop-daemon.sh start datanode

三、程序执行出现Error: java.lang.NullPointerException

空指针异常,确保java程序的正确。变量什么的使用前先实例化声明,不要有数组越界之类的现象。检查程序。

四、执行自己的程序的时候,(各种)报错,请确保一下情况:

前提都是你的程序是正确通过编译的
集群模式下,请把要处理的数据写到HDFS里,并且确保HDFS路径正确
指定执行的jar包的入口类名(我不知道为什么有时候不指定也是可以运行的)

正确的写法类似:

[align=left]$ hadoop jar myCount.jar myCount input output[/align]

五、ssh无法正常通信的问题,可以看看这个
云技术基础:集群搭建SSH的作用及这些命令的含义

六、程序编译问题,各种包没有的情况,请确保你把hadoop目录下 和hadoop/lib目录下的jar包都有引入。


(具体可看hadoop开发方式总结及操作指导

七、Hadoop启动datanode时出现Unrecognized option: -jvm 和 Could not create the Java virtual machine.

在hadoop安装目录/bin/hadoop中有如下一段shell:

View Code SHELL

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: