2012-01-07 89 views
1

我在ubuntu虛擬機上以僞分佈模式運行hadoop。我最近決定增加可用於我的虛擬機的RAM和內核數量,這似乎已經完全搞砸了hdfs。首先,它是在安全模式和我手動發佈,使用:錯誤namenode.FSNamesystem:FSNamesystem初始化失敗

的Hadoop dfsadmin -safemode離開

然後我跑:

的hadoop fsck的-blocks

和幾乎每一個塊被損壞或丟失。所以我想,這只是爲了我的學習,我刪除了「/ user/msknapp」中的所有內容以及「/var/lib/hadoop-0.20/cache/mapred/mapred/.settings」中的所有內容。所以塊錯誤消失了。然後我嘗試:

Hadoop的FS -put MYFILE MYFILE

和get(有刪節):

12/01/07 15:05:29 WARN hdfs.DFSClient: DataStreamer Exception: org.apache.hadoop.ipc.RemoteException: java.io.IOException: File /user/msknapp/myfile could only be replicated to 0 nodes, instead of 1 
    at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getAdditionalBlock(FSNamesystem.java:1490) 
    at org.apache.hadoop.hdfs.server.namenode.NameNode.addBlock(NameNode.java:653) 
    at sun.reflect.GeneratedMethodAccessor8.invoke(Unknown Source) 
12/01/07 15:05:29 WARN hdfs.DFSClient: Error Recovery for block null bad datanode[0] nodes == null 
12/01/07 15:05:29 WARN hdfs.DFSClient: Could not get block locations. Source file "/user/msknapp/myfile" - Aborting... 
put: java.io.IOException: File /user/msknapp/myfile could only be replicated to 0 nodes, instead of 1 
12/01/07 15:05:29 ERROR hdfs.DFSClient: Exception closing file /user/msknapp/myfile : org.apache.hadoop.ipc.RemoteException: java.io.IOException: File /user/msknapp/myfile could only be replicated to 0 nodes, instead of 1 
    at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getAdditionalBlock(FSNamesystem.java:1490) 
    at org.apache.hadoop.hdfs.server.namenode.NameNode.addBlock(NameNode.java:653) 
    at ... 

org.apache.hadoop.ipc.RemoteException: java.io.IOException: File /user/msknapp/myfile could only be replicated to 0 nodes, instead of 1 
    at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getAdditionalBlock(FSNamesystem.java:1490) 
    at org.apache.hadoop.hdfs.server.namenode.NameNode.addBlock(NameNode.java:653) 
    at ... 

於是,我就停止和重新啓動NameNode和DataNode會。沒有運氣:

的Hadoop的NameNode

12/01/07 15:13:47 ERROR namenode.FSNamesystem: FSNamesystem initialization failed. 
java.io.FileNotFoundException: /var/lib/hadoop-0.20/cache/hadoop/dfs/name/image/fsimage (Permission denied) 
    at java.io.RandomAccessFile.open(Native Method) 
    at java.io.RandomAccessFile.<init>(RandomAccessFile.java:233) 
    at org.apache.hadoop.hdfs.server.namenode.FSImage.isConversionNeeded(FSImage.java:683) 
    at org.apache.hadoop.hdfs.server.common.Storage.checkConversionNeeded(Storage.java:690) 
    at org.apache.hadoop.hdfs.server.common.Storage.access$000(Storage.java:60) 
    at org.apache.hadoop.hdfs.server.common.Storage$StorageDirectory.analyzeStorage(Storage.java:469) 
    at org.apache.hadoop.hdfs.server.namenode.FSImage.recoverTransitionRead(FSImage.java:297) 
    at org.apache.hadoop.hdfs.server.namenode.FSDirectory.loadFSImage(FSDirectory.java:99) 
    at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.initialize(FSNamesystem.java:358) 
    at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.<init>(FSNamesystem.java:327) 
    at org.apache.hadoop.hdfs.server.namenode.NameNode.initialize(NameNode.java:271) 
    at org.apache.hadoop.hdfs.server.namenode.NameNode.<init>(NameNode.java:465) 
    at org.apache.hadoop.hdfs.server.namenode.NameNode.createNameNode(NameNode.java:1239) 
    at org.apache.hadoop.hdfs.server.namenode.NameNode.main(NameNode.java:1248) 
12/01/07 15:13:47 ERROR namenode.NameNode: java.io.FileNotFoundException: /var/lib/hadoop-0.20/cache/hadoop/dfs/name/image/fsimage (Permission denied) 
    at java.io.RandomAccessFile.open(Native Method) 
    at java.io.RandomAccessFile.<init>(RandomAccessFile.java:233) 
    at org.apache.hadoop.hdfs.server.namenode.FSImage.isConversionNeeded(FSImage.java:683) 
    at org.apache.hadoop.hdfs.server.common.Storage.checkConversionNeeded(Storage.java:690) 
    at org.apache.hadoop.hdfs.server.common.Storage.access$000(Storage.java:60) 
    at org.apache.hadoop.hdfs.server.common.Storage$StorageDirectory.analyzeStorage(Storage.java:469) 
    at org.apache.hadoop.hdfs.server.namenode.FSImage.recoverTransitionRead(FSImage.java:297) 
    at org.apache.hadoop.hdfs.server.namenode.FSDirectory.loadFSImage(FSDirectory.java:99) 
    at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.initialize(FSNamesystem.java:358) 
    at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.<init>(FSNamesystem.java:327) 
    at org.apache.hadoop.hdfs.server.namenode.NameNode.initialize(NameNode.java:271) 
    at org.apache.hadoop.hdfs.server.namenode.NameNode.<init>(NameNode.java:465) 
    at org.apache.hadoop.hdfs.server.namenode.NameNode.createNameNode(NameNode.java:1239) 
    at org.apache.hadoop.hdfs.server.namenode.NameNode.main(NameNode.java:1248) 

12/01/07 15:13:47 INFO namenode.NameNode: SHUTDOWN_MSG: 
/************************************************************ 
SHUTDOWN_MSG: Shutting down NameNode at ubuntu/127.0.1.1 
************************************************************/ 

會有人請幫我在這裏?我一直在努力解決這個問題好幾個小時。

+0

順便說一下, 「Hadoop的dfsadmin -format」結果如下:ERROR namenode.NameNode:java.io.IOException:無法刪除當前目錄:/var/lib/hadoop-0.20/cache/hadoop/dfs/name/current – msknapp 2012-01-07 23:22:28

+0

我甚至卸載了所有的hadoop並重新安裝了它,並且我仍然有這個相同的錯誤。它看起來像我將被迫刪除虛擬機,並開始一個新的。這是一個非常討厭的錯誤。 – msknapp 2012-01-07 23:46:01

回答

6

進入配置hdfs的位置。刪除那裏的所有內容,格式爲namenode,你很好。如果你沒有正確地關閉你的集羣,通常會發生這種情況!

+0

現在它似乎使用我的本地文件系統而不是hdfs來執行操作。你能向我解釋關閉羣集的「正確」方法嗎?我甚至不知道需要以特定的方式關機。如果關閉虛擬機電源,是否意味着集羣不能正常關機? – msknapp 2012-01-15 12:50:23

+0

所以當你啓動它時,用「start-all.sh」啓動jobtacker的namennode和所有其他運行集羣的守護進程。爲了正確地關閉它,你需要發出「stop-all.sh」命令,這會小心地關閉所有的東西。我建議你關閉它,抹掉hdfs啓動的位置做一個「hadoop namenode -format」,然後重啓羣集。讓我知道這個是否奏效! – inquire 2012-01-16 14:57:36

+0

我有一個類似的問題,我錯誤地從root用戶開始namenode進程,後來意識到我應該從hduser完成它,所以停下來,然後再次嘗試從hduser格式化,並面臨類似的問題。你的答案,非常感謝! 1 UP! – Ouroboros 2013-11-27 10:40:05

0

以下錯誤意味着,文件的FsImage沒有權限

namenode.NameNode: java.io.FileNotFoundException: /var/lib/hadoop-0.20/cache/hadoop/dfs/name/image/fsimage (Permission denied) 

所以給權限的FsImage文件,

$搭配chmod -R 777的FsImage

相關問題