如何在Hadoop中的namenode -format命令之后恢复数据

时间:2017-07-28 10:39:28

标签: java hadoop hdfs

我正在使用hadoop 1.2.1版本。由于某些未知原因,我的名字节点出现故障并获得了日志信息

$("#myform").submit(function(e) {
  e.preventDefault(); // stop the standard form submission
  $.ajax({
    url: this.action,
    type: this.method,
    data: $(this).serialize(),
    success: function(data) {
      console.log(data); // the object returned from your Action will be displayed here.
    }
  });
});

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

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)

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

1 个答案:

答案 0 :(得分:0)

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

hdfs dfsadmin -safemode enter
hdfs dfsadmin -saveNamespace

这些命令会将您的namenode置于安全模式并将编辑内容推送到FSImage文件:

hdfs dfsadmin -fetchImage /path/someFilename

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

现在,您可以将此数据放在namenode元数据目录中,然后重新启动namenode。

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

hadoop namenode -format