最近在学习hadoop,遇到了一些常见的问题,现在来总结一下,和大家分享,以后会持续更新遇见的其他问题。当使用hadoop 发现有问题时,首先使用jps 命令查看启动的节点是否正确,然后再去查看日志文件。
原创文章,转载请注明出处:http://blog.csdn.net/jessonlv/article/details/18221299
通常情况下,我们会遇见一下几种错误:
1、设置主机名错误
看日志,会发现下面的错误:
ERROR org.apache.hadoop.hdfs.server.namenode.NameNode: java.net.UnknownHostException: Invalid hostname for server: master
这是由于主机名设置错误造成的,请检查配置文件中关于主机名的设置,是否正确。
首先使用hostname 命令查看主机名是否正确;
然后使用more /etc/sysconfig/network 命令查看主机名是否记录在文件中;
最后使用more /etc/hosts 命令查看ip 与主机名的映射是否设置。
2、ip 设置错误
看日志,发现下面的错误
ERROR org.apache.hadoop.hdfs.server.namenode.NameNode: java.net.BindException: Problem binding to book0/192.168.1.100:9000 : Cannot assign requested address
这是由于ip 地址设置错误引起的,请检查主机的ip 设置与配置文件的ip 设置是否一致。
使用more /etc/hosts 命令查看ip 与主机名的映射是否设置。
3、hostname 不能带有下划线,不能数字开头
hostname 含有下划线,也会造成启动失败。
启动完成后,一定使用jps 命令查看5 个节点是否全部成功启动。如果哪个节点没有启
动,请查看对应的log 日志。日志的默认目录是$HADOOP_HOME/logs。
以下是我的日志截图:
文件命名是有规律的,“hadoop-[当前用户名]-[节点名称]-[主机名].log”我们只查看log结尾的文件。如果是namenode 节点没有启动,查看hadoop-root-namenode-book0.log 文件。
4、多次执行hadoop 格式化
现象:在Hadoop-root-datanode-master.log 中有如下错误:
ERROR org.apache.hadoop.hdfs.server.datanode.DataNode: java.io.IOException: Incompatible namespaceIDs in
namenode format 清空了namenode 下的数据,但是没有清空datanode 下的数据,导致启动时失败,所要做的就是每次fotmat 前,清空dfs.data.dir 参数配置的目录。重新格式化hdfs的命令。
5、防火墙没有关闭
从本地往hdfs 文件系统上传文件,出现如下错误:
这个问题最有可能就是防火墙没有关闭,导致节点DataNode 与节点NameNode 通信失败。可以使用service iptables status 命令关闭防火墙。这样关闭后,重启操作系统时,防火墙有可能重启,可以关闭自动重启功能。使用chkconfig iptables off 关闭。
6、安全模式导致的错误
错误提示如下:
org.apache.hadoop.dfs.SafeModeException: Cannot delete ..., Name node is in safe mode
在分布式文件系统启动的时候,开始的时候会有安全模式,当分布式文件系统处于安全模式的情况下,文件系统中的内容不允许修改也不允许删除,直到安全模式结束。安全模式主要是为了系统启动的时候检查各个DataNode 上数据块的有效性,同时根据策略必要的复制或者删除部分数据块。运行期通过命令也可以进入安全模式。在实践过程中,系统启动的时候去修改和删除文件也会有安全模式不允许修改的出错提示,只需要等待一会儿即可。如果着急的话,可以执行hadoop dfsadmin –safemode leave 命令关闭安全模式。
总结:以上是几天学习hadoop的时候,遇到的几个问题,后面的学习过程中肯定会遇见各种各样的问题,我会一一记下来,并找出解决方法,持续更新这篇文章。
另外,我会将学习过程和做的笔记和大家分享。
最后,最近发现很多论坛扒了我的文章,让我很是苦恼,不知道广大同学有什么解决方法,帮忙支支招,谢谢大家啦~
2014/1/14更新:
今天在配置hadoop的配置文件的时候,犯了一个小小的疏忽,请看下面:
我在配置hadoop-env.sh 的时候,
这个文件的第九行的内容原来是:
#export JAVA_HOME=/usr/lib/jdk-1.6.0/我们需要将此改为我们自己的jdk目录,我们的目录是/use/local/jdk
我在修改的时候,只把前面的#号去掉后,只把jdk-1.6.0这个名称改了,没有把lib改为local,在启动hadoop的时候造成如下错误:
找不到jdk,呵呵,实在不该粗心大意,记录下来,长个记性!!!!