Hadoop NameNode从元数据备份中恢复

时间:2014-06-09 11:37:04

标签: hadoop

我正在尝试NN元数据恢复。我已经备份了Namenode和Journal节点元数据。它包含编辑日志和fsimages。

我的系统中有两个NN。我以常规频率备份两个NN(hdfs元数据和QJM元数据)上的元数据。我想在最坏的情况下测试恢复过程。假设NN和Journal节点都已关闭,元数据已完全删除。

我想从备份中恢复NN元数据并启动NN。我知道可能会有数据丢失,因为备份后的最新更改将会丢失。

问题

  1. 您认为这种情况是可行/可行的吗?
  2. 我面临一些与txn id不匹配,提交txn id相关的问题。请告诉我们是否有相同的解决方案。
  3. 已尝试的步骤:

    1. 获取NN和QJM的元数据备份。做一些hdfs文件操作 (创建新文件)。
    2. 在两台计算机上停止NN和日记节点。
    3. 从/ data / hdfs和journal目录中删除元数据。
    4. 从备份恢复Fsimages(花一些时间)。
    5. 启动NN。它失败并出现以下异常。
    6. 替代方法:将所有编辑日志和fsimage恢复到hdfs和qjm目录并启动NN但仍然失败。

      NN都失败了,我无法提起。我不想格式化hdfs,因为它会更改群集ID,备份将无法使用。

      例外

      1. 编辑日志中似乎存在间隙。我们期待txid 71453,但得到了txid 71466
      2. 客户端尝试将提交的txid从71599向后移动到71453
      3. recoverUnfinalizedSegments因所需日记失败。决定将日志同步到startTxId:71453但记录器10.204.64.26:8485已经看到txid 71599已提交

3 个答案:

答案 0 :(得分:1)

您可以启用namenode并启用recover flag。 Namenode recover将处理损坏的maetadata。

./bin/hadoop namenode -recover

答案 1 :(得分:1)

  1. 由于最新的FsImage和Edit已丢失或损坏,您应该尝试恢复元数据

    ./bin/hadoop namenode -recover

    参考:NameNode Recovery Tools for the Hadoop Distributed File System

  2. 因为日志与namenode不同步,所以你应该重新启动它

    ./bin/hdfs namenode -initializeSharedEdits

  3. 由于恢复的FsImage丢失了自上次备份以来更新的最新数据,因此应检查并删除损坏的数据

    ./bin/hadoop fsck -delete /

    如果你不做fsck,那么namenode可能会陷入安全模式,因为有太多无响应的阻塞。

答案 2 :(得分:0)

启动所有JournalNode。确保已复制fsimage,fsimage.md5和VERSION文件。然后运行hdfs namenode -initializeSharedEdits -force,它将只格式化JournalNode。然后启动NameNode(1)。它应该工作。如果它不起作用,请告诉我。