2012-01-07 937 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

相关问题