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查看正常運行