您的位置:首页 > Web前端 > Node.js

hadoop namenode down的遭遇

2013-04-19 13:36 288 查看
 正在往测试环境的hadoop集群上传文件,上传失败,提示put: Call to mymaster/123.168.12.6:9000 failed on local exception: java.io.EOFException

后来关闭集群,并重启机器,namenode进程还是起不来,看日志,报错提示为:

java.io.IOException: Incorrect data format. logVersion is -18 but writables.length is 0.

        at org.apache.hadoop.hdfs.server.namenode.FSEditLog.loadFSEdits(FSEditLog.java:544)

        at org.apache.hadoop.hdfs.server.namenode.FSImage.loadFSEdits(FSImage.java:992)

        at org.apache.hadoop.hdfs.server.namenode.FSImage.loadFSImage(FSImage.java:812)

        at org.apache.hadoop.hdfs.server.namenode.FSImage.recoverTransitionRead(FSImage.java:364)

        at org.apache.hadoop.hdfs.server.namenode.FSDirectory.loadFSImage(FSDirectory.java:87)

        at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.initialize(FSNamesystem.java:311)

        at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.<init>(FSNamesystem.java:292)

        at org.apache.hadoop.hdfs.server.namenode.NameNode.initialize(NameNode.java:201)

        at org.apache.hadoop.hdfs.server.namenode.NameNode.<init>(NameNode.java:279)

        at org.apache.hadoop.hdfs.server.namenode.NameNode.createNameNode(NameNode.java:956)

        at org.apache.hadoop.hdfs.server.namenode.NameNode.main(NameNode.java:965)

2013-03-13 14:20:19,922 INFO org.apache.hadoop.ipc.Server: Stopping server on 9000

2013-03-13 14:20:19,923 ERROR org.apache.hadoop.hdfs.server.namenode.NameNode: java.io.IOException: Incorrect data format. logVersion is -18 but writables.length is 0.

找了很久原因,后来发现是磁盘空间满了。清空一些文件,重启hadoop,仍然报一样的错误,后来在网上找资料,才知道有可能是edits文件出错了。

切换到dfs.name.dir目录下,进入current目录,在命令行执行printf "\xff\xff\xff\xee\xff" > edits,记得先把edits文件备份。然后重启hadoop,问题解决,数据也没丢失。

==========================网络原文1====================

ERROR org.apache.hadoop.hdfs.server.namenode.NameNode: java.lang.NumberFormatException: For input string: ""

at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)

at java.lang.Integer.parseInt(Integer.java:470)

at java.lang.Short.parseShort(Short.java:120)

大概是因为,首先是主节点的磁盘没空间了,建议先把集群各节点的剩余空间看下,最好有定时清理的程序。

腾出空间后,再重新启动,仍然有问题。那么,就有可能是namenode的资料有损了,到dfs.name.dir目录下查看一下,比较一下image中fsimage和current中fsimage的大小,将前面的拷进后面的替换掉(做好备份),再试试。

如果还不行,看你是否有这只secondarynamenode,如果有,将里面的文件覆盖掉dfs.name.dir下的,重新启动试试。

再不行的话,网上说是把namenode的current中所有文件备份好,然后格式化namenode,然后把备份的image拷贝回来,重启namenode所有服务后,./bin/start-balancer.sh,就一切OK了。但是我怕hbase里的数据会丢失。

于是再找,发现一个方法竟然可行,具体原因也不是很明白,Could you backup your edits file, try $ printf "\xff\xff\xff\xee\xff" > 

edits, and start HDFS? It should work.

就是把原来的edits备份下,再新的空的edits下写入上面的内容(注意要在新的空的文件下,不然我试过还是会有问题出现),然后,重启hadoop,问题解决!

========================网络原文2=====================================

当写元数据的分区写满,可能导致namenode挂掉从而导致及时清理出大块的空间也无法启动namenode,那此时系统namenode会报错

org.apache.hadoop.hdfs.server.namenode.NameNode: java.lang.NumberFormatException: For input string:“”

这是因为edit文件错误,此时执行 printf "\xff\xff\xff\xee\xff">edits 将edits 清空就可以 启动namenode

======================================================================
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐