从元数据备份中恢复 Hadoop NameNode

标签 hadoop

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

我的系统中有两个神经网络。我定期备份两个 NN 上的元数据(hdfs 元数据和 QJM 元数据)。我想在最坏的情况下测试恢复程序。假设 NN 和 Journal 节点均已关闭,元数据已完全删除。

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

问题:

  1. 您认为这种情况是否可能/可行?
  2. > 我面临一些与 txn id 不匹配、提交的 txn id 相关的问题。请告诉是否有相同的解决方案。

尝试的步骤:

  1. 对 NN 和 QJM 进行元数据备份。做一些hdfs文件操作 (创建新文件)。
  2. 停止两台机器上的 NN 和 Journal 节点。
  3. 从/data/hdfs 和日志目录中删除元数据。
  4. 从备份中恢复 Fsimages(前段时间)。
  5. 启动神经网络。它因以下异常而失败。

替代方法:将所有编辑日志和 fsimage 恢复到 hdfs 和 qjm 目录并启动 NN,但仍然失败。

两个 NN 都已关闭,我无法启动。我不想格式化 hdfs,因为它会更改集群 ID,并且备份将无法使用。

异常(exception)情况:

  1. 编辑日志中似乎有一处空白。我们期望 txid 71453,但得到 txid 71466
  2. 客户端试图将提交的 txid 从 71599 向后移动到 71453
  3. 所需日志的 recoverUnfinalizedSegments 失败。决定将日志同步到 startTxId: 71453 但记录器 10.204.64.26:8485 已经看到 txid 71599 已提交

最佳答案

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

    ./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,名称节点可能会卡在安全模式下,因为有太多无响应的 block 。

关于从元数据备份中恢复 Hadoop NameNode,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24119486/

相关文章:

java - Hadoop ClassNotFoundException 异常

azure - Cloudera - 启动服务 - NameNode 未格式化

linux - .bashrc 文件显示错误

hadoop - 哪个配置单元表可提供更好的性能?

java - 从 Hadoop 中的 Jar 中获取文件资源

hadoop - pig 分层抽样?

hadoop - 典型的 Hadoop 架构和 MapR 架构之间的区别

java - Spark join/groupby 数据集需要很多时间

hadoop - 使用 Mapreduce 为数据添加新列

hadoop - 如何从配置单元中的字符串解析日期?