Hadoop Namenode不能啓動(dfs/name is in an inconsistent state

前段時間自己的本機上搭的Hadoop環境(按文檔的僞分佈式),第一天還一切正常,後來發現每次重新開機以後都不能正常啓動,在start-dfs.sh之後jps一下發現namenode不能正常啓動,按提示找到logs目錄下namenode的啓動log發現如下異常

org.apache.hadoop.hdfs.server.common.InconsistentFSStateException: Directory /tmp/hadoop-javoft/dfs/name is in an inconsistent state: storage di rectory does not exist or is not accessible.
at org.apache.hadoop.hdfs.server.namenode.FSImage.recoverTransitionRead(FSImage.java:291)
at org.apache.hadoop.hdfs.server.namenode.FSDirectory.loadFSImage(FSDirectory.java:97)
at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.initialize(FSNamesystem.java:379)
at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.<init>(FSNamesystem.java:353)
at org.apache.hadoop.hdfs.server.namenode.NameNode.initialize(NameNode.java:254)
at org.apache.hadoop.hdfs.server.namenode.NameNode.<init>(NameNode.java:434)
at org.apache.hadoop.hdfs.server.namenode.NameNode.createNameNode(NameNode.java:1153)
at org.apache.hadoop.hdfs.server.namenode.NameNode.main(NameNode.java:1162)
2011-07-23 12:48:43,125 ERROR org.apache.hadoop.hdfs.server.namenode.NameNode: org.apache.hadoop.hdfs.server.common.InconsistentFSStateException : Directory /tmp/hadoop-javoft/dfs/name is in an inconsistent state: storage directory does not exist or is not accessible.
at org.apache.hadoop.hdfs.server.namenode.FSImage.recoverTransitionRead(FSImage.java:291)
at org.apache.hadoop.hdfs.server.namenode.FSDirectory.loadFSImage(FSDirectory.java:97)
at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.initialize(FSNamesystem.java:379)
at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.<init>(FSNamesystem.java:353)
at org.apache.hadoop.hdfs.server.namenode.NameNode.initialize(NameNode.java:254)
at org.apache.hadoop.hdfs.server.namenode.NameNode.<init>(NameNode.java:434)
at org.apache.hadoop.hdfs.server.namenode.NameNode.createNameNode(NameNode.java:1153)
at org.apache.hadoop.hdfs.server.namenode.NameNode.main(NameNode.java:1162)

2011-07-23 12:48:43,126 INFO org.apache.hadoop.hdfs.server.namenode.NameNode: SHUTDOWN_MSG: 

Directory does not exist?但是爲什麼剛裝完時是存在的呢,抱着試試看的態度,再次執行。

hadoop namenode -format

執行之後再啓動,namenode啓動成功了,說明上面does not exist的目錄在format namenode的時候重新建起來了,但是如果每次重啓都要format namenode,也太不靠譜了,不止是麻煩,更大的麻煩是裏面的數據不能總被無情的delete掉啊,問題必須解決。

Directory /tmp/hadoop-javoft/dfs/name is in an inconsistent state: storage directory does not exist or is not accessible.這裏的目錄既然是在tmp下面的,回憶一下,tmp目錄下的文件是臨時文件會被定期刪除的,貌似bug已經露出水面。那就重啓計算機試試是不是因爲這,重啓之前檢查一下tmp目錄下面確定幾個format namenode之後應該有的目錄都有的,重啓之後,發現全部被刪掉。在執行一次 start-dfs.sh,看到tmp目錄下面建了一些目錄,但是dfs/name目錄仍然不存在,在start-dfs.sh時候建了一部分目錄和文件。而dfs/name需要在hadoop namenode -format時建立。問題清楚了。

解決方案就很簡單,這些目錄的位置都是根據hadoop.tmp.dir的位置確定的,所以只需要在conf/core-site.xml覆蓋hadoop.tmp.dir的默認值即可:

...
<property>
   <name>hadoop.tmp.dir</name>
   <value>/home/javoft/Documents/hadoop/hadoop-${user.name}</value>
   <description>A base for other temporary directories.</description>
</property>
...

如此問題解決。。。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章