1.错误日志:
Directory /tmp/hadoop-root/dfs/name is in an inconsistent state: storage directory does not exist or is not accessible.
错误原因:
在Linux下Hadoop等的各种数据默认保存在 /tmp目录下。当重启系统后 /tmp目录中的数据信息被清除,导致Hadoop启动失败。确定目录 /tmp/hadoop-root/dfs/name是否存在
解决方案:
bin/hadoop namenode -format

2.错误日志:
Incompatible namespaceIDS in … :namenode namespaceID = … ,datanode namespaceID=…  
错误原因:
格式化NameNode后会重新创建一个新的namespaceID,以至于和DataNode上原有的不一致。  
解决方案:
1) 在 /tmp/hadoop-root/dfs/data 目录下残留的数据删掉,重新建(很麻烦,但看你了)
2) 狠方法:bin/stop-all.sh hadoop fs namenode -format bin/start-all.sh
3) 登上DataNode,把位于{dfs.data.dir}/current/VERSION中的namespaceID改为和NameNode相同即可(推荐)



[hadoop@dtydb6 current]$ cat VERSION
#Fri Dec 14 09:37:22 CST 2012
namespaceID=525507667
storageID=DS-120876865-10.4.124.236-50010-1354772633249



3.错误日志:
使用CDH5,进入hive 想创建表,报告以上的异常”Name node is in safe mode”,使用命令”hadoop dfsadmin -safemode leave ”让其离开安全模式,仍然不能解决。

hdfs 的GC日志 hdfs启动日志_java


解决方案:

使用CDH5发行版,在一般命令之前都要添加“sudo –u hdfs”(ROOT级命令)

# sudo –u hdfs hadoop dfsadmin –safemode leave


4.关于 Warning: $HADOOP_HOME is deprecated.
hadoop 1.0.0 版本,安装完之后敲入hadoop 命令时, 老是提示这个警告:Warning: $HADOOP_HOME is deprecated.
经查 hadoop-1.0.0/bin/hadoop 脚本和“hadoop-config.sh”脚 本,发现脚本中对HADOOP_HOME的环境变量设置做了判断,笔者的环境根本不需要设置HADOOP_HOME环境变量。
解决方案:
1) 编辑“/etc/profile”文件,去掉 HADOOP_HOME 的变量设定,重新输入hadoop fs 命令,警告消失。
2) 编辑“/etc/profile”文件,添加一个环境变量,之后警告消失:export HADOOP_HOME_WARN_SUPPRESS=1
3) 编辑“hadoop-config.sh”文件,把下面的“if - fi”功能注释掉。

hdfs 的GC日志 hdfs启动日志_hdfs 的GC日志_02

 

5.解决“no datanode to stop ”问题
原因:每次 namenode format 会重新创建一个 namenodeId,而 /tmp/dfs/data 下包含了上次 format 下的 id,namenode format 清空了 namenode 下的数据,但是没有清空 datanode 下的数据。导致启动时失败,所要做的就是每次 fotmat 前,清空 /tmp 一下的所有目录。
解决方案:
修改每个 Slave 的 namespaceID 使其与Master即NN的 namespaceID 一致。

hdfs 的GC日志 hdfs启动日志_网络_03

 

6.Slave 服务器中datanode启动后又自动关闭
查看日志发下如下错误:ERROR org.apache.hadoop.hdfs.server.datanode.DataNode: java.io.IOException: Call to ... failed on local exception: java.net .NoRouteToHostException: No route to host
解决方案:
关闭防火墙:service iptables stop

7.从本地往hdfs 文件系统上传文件
出现如下错误:INFO hdfs.DFSClient: Exception in createBlockOutputStream java.io.IOException: Bad connect ack with firstBadLink
INFO hdfs.DFSClient: Abandoning block blk_-1300529705803292651_37023
WARN hdfs.DFSClient: DataStreamer Exception: java.io.IOException: Unable to create new lock.
解决方案:
1) 关闭防火墙:service iptables stop
2) 禁用selinux:编辑“/etc/selinux/config”文件,设置“SELINUX=disabled”

8.hadoop集群启动start-all.sh的时候,slave总是无法启动datanode,并会报错:… could only be replicated to 0 nodes, instead of 1 …就是有节点的标识可能重复。也可能有其他原因,以下解决方法请依次尝试。
解决方法:
1).删除所有节点dfs.data.dir和dfs.tmp.dir目录(默认为tmp/dfs/data和tmp/dfs/tmp)下的数据文件;然后重新hadoop namenode -format 格式化节点;然后启动。
2).如果是端口访问的问题,你应该确保所用的端口都打开,比如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
3).还有可能是防火墙的限制集群间的互相通信。尝试关闭防火墙。/etc/init.d/iptables stop
4).最后还有可能磁盘空间不够了,请查看 df -al