【问题标题】:How to recover data after namenode -format command in Hadoop如何在 Hadoop 中的 namenode -format 命令后恢复数据
【发布时间】:2017-07-29 02:20:45
【问题描述】:

我使用的是 hadoop 1.2.1 版本。由于一些未知的原因,我的namenode宕机并获得了以下日志信息

2017-07-28 15:04:47,422 INFO org.apache.hadoop.hdfs.server.common.Storage: Start loading image file /home/hpcnl/crawler/hadoop-1.2.1/tmp/dfs/name/current/fsimage
2017-07-28 15:04:47,423 ERROR org.apache.hadoop.hdfs.server.namenode.FSNamesystem: FSNamesystem initialization failed.
java.io.EOFException
        at java.io.DataInputStream.readInt(DataInputStream.java:392)
        at org.apache.hadoop.hdfs.server.namenode.FSImage.loadFSImage(FSImage.java:881)
        at org.apache.hadoop.hdfs.server.namenode.FSImage.loadFSImage(FSImage.java:834)
        at org.apache.hadoop.hdfs.server.namenode.FSImage.recoverTransitionRead(FSImage.java:378)
        at org.apache.hadoop.hdfs.server.namenode.FSDirectory.loadFSImage(FSDirectory.java:104)
        at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.initialize(FSNamesystem.java:427)
        at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.<init>(FSNamesystem.java:395)
        at org.apache.hadoop.hdfs.server.namenode.NameNode.initialize(NameNode.java:299)
        at org.apache.hadoop.hdfs.server.namenode.NameNode.<init>(NameNode.java:569)
        at org.apache.hadoop.hdfs.server.namenode.NameNode.createNameNode(NameNode.java:1479)
        at org.apache.hadoop.hdfs.server.namenode.NameNode.main(NameNode.java:1488)
2017-07-28 15:04:47,428 ERROR org.apache.hadoop.hdfs.server.namenode.NameNode: java.io.EOFException
        at java.io.DataInputStream.readInt(DataInputStream.java:392)
        at org.apache.hadoop.hdfs.server.namenode.FSImage.loadFSImage(FSImage.java:881)
        at org.apache.hadoop.hdfs.server.namenode.FSImage.loadFSImage(FSImage.java:834)
        at org.apache.hadoop.hdfs.server.namenode.FSImage.recoverTransitionRead(FSImage.java:378)
        at org.apache.hadoop.hdfs.server.namenode.FSDirectory.loadFSImage(FSDirectory.java:104)
        at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.initialize(FSNamesystem.java:427)
        at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.<init>(FSNamesystem.java:395)
        at org.apache.hadoop.hdfs.server.namenode.NameNode.initialize(NameNode.java:299)
        at org.apache.hadoop.hdfs.server.namenode.NameNode.<init>(NameNode.java:569)
        at org.apache.hadoop.hdfs.server.namenode.NameNode.createNameNode(NameNode.java:1479)
        at org.apache.hadoop.hdfs.server.namenode.NameNode.main(NameNode.java:1488)

然后我在网上搜索,发现你应该停止集群并运行以下命令

hadoop namenode -format

此后,当我重新启动集群时,数据未出现在 HDFS 的各个文件夹中。我可以恢复我的数据吗?如果我的namenode出现故障,将来如何处理这种情况?

【问题讨论】:

标签: java hadoop hdfs


【解决方案1】:

您始终可以使用以下命令备份您的元数据:

hdfs dfsadmin -safemode enter
hdfs dfsadmin -saveNamespace

这些命令会将您的名称节点置于安全模式并将编辑推送到 FSImage 文件:

hdfs dfsadmin -fetchImage /path/someFilename

cd /namenode/data/current/
tar -cvf /root/nn_backup_data.tar

现在您可以将这些数据放在您的 namenode 元数据目录中并重新启动 namenode。

请注意,除非您没有任何其他选项,否则您不应使用以下命令:

hadoop namenode -format

【讨论】:

    猜你喜欢
    • 2017-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-12
    • 1970-01-01
    • 1970-01-01
    • 2018-05-21
    • 2014-06-12
    相关资源
    最近更新 更多