1、读写权限出错
首先jps检查过后只有datanode没有启动,然后去Hadoop安装目录下的logs文件中找最近一次datanode的日志
(网上有很多种故障,建议最好自己先看看日志自己的故障是不是和别人是一样的,然后在进行排错):
org.apache.hadoop.hdfs.server.datanode.DataNode: Invalid directory in dfs.data.dir:
Incorrect permission for /home/hadoop/HadoopPseudoDistributTest/tmpdir/hdfs/data, expected: rwxr-xr-x, while actual: rwxrwxrwx
我的是读写权限出错,用下面的命令修改
chmod 755 /home/hadoop/HadoopPseudoDistributTest/tmpdir/hdfs/data
附上文件修改权限讲解:
Linux系统下如何查看及修改文件读写权限 - huiy - 博客园
http://www.cnblogs.com/CgenJ/archive/2011/07/28/2119454.html
2、datanode的ID出现问题
之前自己IP(ifconfig查看)出错时导致namenode启动不起来,自己没发现,看到网上说要
格式化namenode: bin/hadoop namenode -format
在调用几次后,发现datanode就启动不起来了,(datanode在迅速开始后关闭有时也是这个原因)后来从网上查到原因如下:
ERROR org.apache.hadoop.hdfs.server.datanode.DataNode: java.io.IOException:
Incompatible namespaceIDs in /home/gqy/hadoop/data: namenode namespaceID = 1234444; datanode namespaceID = 23453466
在执行文件系统格式化时,会在namenode数据文件夹(即配置文件中dfs.name.dir在本地系统的路径)中保存一个current/VERSION文件,
记录namespaceID,标识了所格式化的 namenode的版本。如果频繁地格式化namenode,那么datanode中保存(即配置文件中dfs.data.dir在本地系统的路径)
的current/VERSION文件只是你第一次格式化时保存的namenode的ID,因此就会造成datanode与namenode之间的id不一致。
解决办法: 把配置文件中dfs.data.dir在本地系统的路径下的current/VERSION中的namespaceID(即datanode namespaceID = 23453466)改为与
namenode namespaceID = 1234444(从日志里找)一样。
3、namenode进程端口号被别的程序占用了
也有可能是我有时没有直接stop-all.sh,直接关的:
命令:netstat -tunlp | grep java 查看有哪些端口被占(过滤java进程占用)
然后用kill 进程号,重新:bin/start-all.sh,jps查看正常运行