伪模式中没有namenode错误

时间:2011-06-22 23:48:52

标签: hadoop

我是hadoop的新手,正处于学习阶段。 根据Hadoop Definitve指南,我已经在伪分布式模式下设置了我的hadoop,一切正常。我甚至能够执行昨天第3章的所有例子。今天,当我重新启动我的unix并尝试运行start-dfs.sh然后尝试localhost:50070 ...它显示错误,当我尝试停止dfs(stop-dfs.sh)时,它说没有namenode到停。我一直在谷歌上搜索这个问题但没有结果。此外,当我再次格式化我的namenode ...一切正常,我能够连接到localhost:50070甚至复制hdfs中的文件和目录,但是一旦我重新启动我的linux并尝试连接到hdfs出现同样的问题。

以下是错误日志:

************************************************************/
2011-06-22 15:45:55,249 INFO org.apache.hadoop.hdfs.server.namenode.NameNode: STARTUP_MSG:
/************************************************************
STARTUP_MSG: Starting NameNode
STARTUP_MSG:   host = ubuntu/127.0.1.1
STARTUP_MSG:   args = []
STARTUP_MSG:   version = 0.20.203.0
STARTUP_MSG:   build = http://svn.apache.org/repos/asf/hadoop/common/branches/branch-0.20-security-203 -r 1099333; compiled by 'oom' on Wed May  4 07:57:50 PDT 2011
************************************************************/
2011-06-22 15:45:56,383 INFO org.apache.hadoop.metrics2.impl.MetricsConfig: loaded properties from hadoop-metrics2.properties
2011-06-22 15:45:56,455 INFO org.apache.hadoop.metrics2.impl.MetricsSourceAdapter: MBean for source MetricsSystem,sub=Stats registered.
2011-06-22 15:45:56,494 INFO org.apache.hadoop.metrics2.impl.MetricsSystemImpl: Scheduled snapshot period at 10 second(s).
2011-06-22 15:45:56,494 INFO org.apache.hadoop.metrics2.impl.MetricsSystemImpl: NameNode metrics system started
2011-06-22 15:45:57,007 INFO org.apache.hadoop.metrics2.impl.MetricsSourceAdapter: MBean for source ugi registered.
2011-06-22 15:45:57,031 WARN org.apache.hadoop.metrics2.impl.MetricsSystemImpl: Source name ugi already exists!
2011-06-22 15:45:57,059 INFO org.apache.hadoop.metrics2.impl.MetricsSourceAdapter: MBean for source jvm registered.
2011-06-22 15:45:57,070 INFO org.apache.hadoop.metrics2.impl.MetricsSourceAdapter: MBean for source NameNode registered.
2011-06-22 15:45:57,374 INFO org.apache.hadoop.hdfs.util.GSet: VM type       = 32-bit
2011-06-22 15:45:57,374 INFO org.apache.hadoop.hdfs.util.GSet: 2% max memory = 19.33375 MB
2011-06-22 15:45:57,374 INFO org.apache.hadoop.hdfs.util.GSet: capacity      = 2^22 = 4194304 entries
2011-06-22 15:45:57,374 INFO org.apache.hadoop.hdfs.util.GSet: recommended=4194304, actual=4194304
2011-06-22 15:45:57,854 INFO org.apache.hadoop.hdfs.server.namenode.FSNamesystem: fsOwner=anshu
2011-06-22 15:45:57,854 INFO org.apache.hadoop.hdfs.server.namenode.FSNamesystem: supergroup=supergroup
2011-06-22 15:45:57,854 INFO org.apache.hadoop.hdfs.server.namenode.FSNamesystem: isPermissionEnabled=true
2011-06-22 15:45:57,868 INFO org.apache.hadoop.hdfs.server.namenode.FSNamesystem: dfs.block.invalidate.limit=100
2011-06-22 15:45:57,869 INFO org.apache.hadoop.hdfs.server.namenode.FSNamesystem: isAccessTokenEnabled=false accessKeyUpdateInterval=0 min(s), accessTokenLifetime=0 min(s)
2011-06-22 15:45:58,769 INFO org.apache.hadoop.hdfs.server.namenode.FSNamesystem: Registered FSNamesystemStateMBean and NameNodeMXBean
2011-06-22 15:45:58,809 INFO org.apache.hadoop.hdfs.server.namenode.NameNode: Caching file names occuring more than 10 times
**2011-06-22 15:45:58,825 INFO org.apache.hadoop.hdfs.server.common.Storage: Storage directory /tmp/hadoop-anshu/dfs/name does not exist.
2011-06-22 15:45:58,827 ERROR org.apache.hadoop.hdfs.server.namenode.FSNamesystem: FSNamesystem initialization failed.
org.apache.hadoop.hdfs.server.common.InconsistentFSStateException: Directory /tmp/hadoop-anshu/dfs/name is in an inconsistent state: storage directory does not exist or is not accessible.
    at org.apache.h**adoop.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-06-22 15:45:58,828 ERROR org.apache.hadoop.hdfs.server.namenode.NameNode: org.apache.hadoop.hdfs.server.common.InconsistentFSStateException: Directory /tmp/hadoop-anshu/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-06-22 15:45:58,829 INFO org.apache.hadoop.hdfs.server.namenode.NameNode: SHUTDOWN_MSG:
/************************************************************
SHUTDOWN_MSG: Shutting down NameNode at ubuntu/127.0.1.1
************************************************************/

感谢任何帮助 感谢您

8 个答案:

答案 0 :(得分:14)

这是踢球者:

  

org.apache.hadoop.hdfs.server.common.InconsistentFSStateException:   目录/ tmp / hadoop-anshu / dfs / name   处于不一致状态:存储   目录不存在或不存在   访问。

我一直有类似的问题。我用stop-all.sh来关闭hadoop。我想我认为这样可以妥善保存我的HDFS中的数据是愚蠢的。

但据我所知,似乎是hadoop-daemon.sh脚本中的相应代码块,情况并非如此 - 它只会杀死进程:

(stop)

    if [ -f $pid ]; then
      if kill -0 `cat $pid` > /dev/null 2>&1; then
        echo stopping $command
        kill `cat $pid`
      else
        echo no $command to stop
      fi
    else
      echo no $command to stop
    fi

你看看它抱怨的目录是否存在?我检查过但我的没有,虽然这里有一个(空的!)数据文件夹,我想这些数据可能曾经存在过。

所以我的猜测是我们需要做的是配置Hadoop,使得我们的namenode和datanode不存储在tmp目录中。操作系统有可能正在进行维护并删除这些文件。要么那个hadoop数字,你不再关心它们了,因为你不会把它们留在tmp目录中,如果你这样做了,你就不会在map-reduce工作中重新启动你的机器。我真的不认为这个应该发生(我的意思是,这不是设计的东西),但它似乎是一个很好的猜测。

所以,基于这个网站http://wiki.datameer.com/display/DAS11/Hadoop+configuration+file+templates 我编辑了我的conf / hdfs-site.xml文件以指向以下路径(显然,根据您的需要制作您自己的目录):

<property>
  <name>dfs.name.dir</name>
  <value>/hadoopstorage/name/</value>
</property>

<property>
  <name>dfs.data.dir</name>
  <value>/hadoopstorage/data/</value>
</property>

这样做了,格式化了新的namenode(遗憾的是,在这种情况下数据丢失似乎不可避免),停止并使用shell脚本启动hadoop,重启机器,我的文件仍在那里......

YMMV ...希望这对你有用!我在OS X上,但我不认为你应该有不同的结果。

Ĵ

答案 1 :(得分:8)

如果你不关心丢失数据,只需执行命令:

./hadoop namenode -format

答案 2 :(得分:5)

我有类似的问题,这有帮助

chown -R hdfs:hadoop /path/to/namenode/date/dir

答案 3 :(得分:1)

在conf / hdfs-site.xml文件中设置此属性对我有用!!!

谢谢jsh

<property>
  <name>dfs.name.dir</name>
  <value>/hadoopstorage/name/</value>
</property>

<property>
  <name>dfs.data.dir</name>
  <value>/hadoopstorage/data/</value>`enter code here`
</property>

别忘了为这些目录设置适当的权限

答案 4 :(得分:1)

JSH答案是对的。

只需要对hadoop 2.6进行一些更改,我必须这样做:

<property>
  <name>dfs.namenode.name.dir</name>
  <value>/hadoopstorage/name/</value>
</property>

<property>
  <name>dfs.datanode.data.dir</name>
  <value>/hadoopstorage/data/</value>
</property>

答案 5 :(得分:0)

如果您尚未解决问题,请尝试以下操作: 将dfs.name.dir目录提供给用户组hadoop,并授予该组写入权限。

答案 6 :(得分:0)

在hadoop配置目录中查看coresite.xml

  1. 转到配置目录
  2. vi core-site.xml,hdf.site.xml
  3. 确保您的端口号和路径正确

答案 7 :(得分:0)

我有类似的问题,但略有不同。

运行 start-all.sh 接缝很好,但是 jps 显示没有名称节点,当我运行 hdfs dfs时我看不到列表-ls /

我的第一次尝试是运行 hadoop namenode -format ,然后出现namenode但datanode消失。

在Google搜索解决方案后,我运行 rm -rf / usr / local / hadoop_store / hdfs / datanode / * 并重新启动hadoop, jps 显示:

    12912 ResourceManager  
    13391 FsShell  
    13420 Jps  
    13038 NodeManager  
    12733 SecondaryNameNode  
    12432 NameNode  
    12556 DataNode  

现在我可以像往常一样使用hadoop命令。

HTH!