Hadoop Namenode不能启动(dfs/name is in an inconsistent state)

2019-03-28 13:56|来源: 网络

前段时间自己的本机上搭的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>
...

如此问题解决。。。

相关问答

更多
  • ,就当是抛砖引玉了。 相信楼主知道,hadoop的文件系统叫做hdfs,就是hadoop分布式分布式文件系统的中文简写。这个系统是对google的gfs的开源实现。下面来回答问题。 首先是节点故障: google在他们那篇gfs的论文中说,google在使用gfs曾说过,google在使用gfs时遇到过各种各样的问题,主要有:应用程序bug、操作系统的bug、人为失误,甚至还有硬盘、内存、连接器、网络以及电源失效。在一个大型的系统中,硬盘内存等等组件的老化,过度使用(因为数据读写非常频繁)等问题也是不容忽视 ...
  • 很酷,我找到了解决方案。 停止所有运行的服务器 1) stop-all.sh 编辑文件/usr/local/hadoop/conf/hdfs-site.xml并添加下面的配置(如果缺失) dfs.data.dir /app/hadoop/tmp/dfs/name/data true d ...
  • 为此使用绝对路径,并确保hadoop用户有权访问此目录: - dfs.data.dir ~/hacking/hd-data/dn 还要确保你格式化这个路径 # hadoop namenode -format Use absolute path for this and make sure the hadoop user has permissions to access this d ...
  • 检查hdfs-site.xml和core-site.xml。 相关属性是: dfs.name.dir /var/lib/hadoop/dfs/name Determines where on the local filesystem the DFS name node should store the name table(fsimage). If t ...
  • 在vanilla Docker中,您不应该依赖于在RUN步骤之间运行的服务。 他们不会。 或者将jps作为相同RUN步骤的一部分,或者更好的是,作为CMD或ENTRYPOINT语句的一部分启动服务。 In the vanilla Docker you should not rely on services running between the RUN steps. They will not. Either do jps as the part of the same RUN step or, bette ...
  • 这很简单 - 格式化你的名字节点 mcbatyuk:hadoop bam$ bin/hadoop namenode -format Warning: $HADOOP_HOME is deprecated. 12/04/11 21:04:55 INFO namenode.NameNode: STARTUP_MSG: /************************************************************ STARTUP_MSG: Starting NameNode STA ...
  • org.apache.hadoop.hdfs.server.common.InconsistentFSStateException: Directory /home/kishan/hdfs/namenode is in an inconsistent state: storage directory does not exist or is not accessible 你的Namenode需要一个格式。 hdfs namenode -format 如果Datanode数据目录已创建,请在重新启动群集之 ...
  • 在重新格式化驱动器后, 该站点指出了一个解决方案: 我遇到了hadoop的问题,在重新格式化驱动器后它无法启动。 要解决此问题,请确保所有hadoop目录中的VERSION编号相同 md5sum / hadoop / sd * / dfs / data / current / VERSION 如果它们在所有分区中的版本不同,那么您将收到错误。 我只是从其他驱动器之一复制了VERSION信息,更改了权限,并重新启动了HDFS。 Found a fix. Needed to create a fresh hdf ...
  • 您需要为在/usr/local/hadoop_store/hdfs/namenode目录下运行服务的用户授予读写权限。 完成后,您应该使用hadoop namenode -format运行format命令 然后尝试启动您的服务。 You would need to give read and write permission to user with which you are running the services on directory /usr/local/hadoop_store/hdfs/na ...
  • 默认情况下,Hadoop配置为开箱即用。 为了实现这一点,所有重要的(非临时的)dirs都指向${hadoop.tmp.dir} ,而这反过来指向/tmp ,而/tmp又出现在所有Linux系统上。 因此,您还需要调整其他重要路径,请参阅hdfs-default.xml : dfs.namenode.name.dir dfs.datanode.data.dir dfs.namenode.checkpoint.dir 它们是单独的选项,因为在实际环境中,跨不同的物理存储设备分发临时和非临时数据可能是可行的。 ...