我正在尝试 NN 元数据恢复。我已经备份了 Namenode 和 Journal 节点元数据。它包含编辑日志和 fsimages。
我的系统中有两个神经网络。我定期备份两个 NN 上的元数据(hdfs 元数据和 QJM 元数据)。我想在最坏的情况下测试恢复程序。假设 NN 和 Journal 节点均已关闭,元数据已完全删除。
我想从备份中恢复 NN 元数据并启动 NN。我知道可能会丢失数据,因为备份后所做的最新更改会丢失。
问题:
- 您认为这种情况是否可能/可行?
- > 我面临一些与 txn id 不匹配、提交的 txn id 相关的问题。请告诉是否有相同的解决方案。
尝试的步骤:
- 对 NN 和 QJM 进行元数据备份。做一些hdfs文件操作 (创建新文件)。
- 停止两台机器上的 NN 和 Journal 节点。
- 从/data/hdfs 和日志目录中删除元数据。
- 从备份中恢复 Fsimages(前段时间)。
- 启动神经网络。它因以下异常而失败。
替代方法:将所有编辑日志和 fsimage 恢复到 hdfs 和 qjm 目录并启动 NN,但仍然失败。
两个 NN 都已关闭,我无法启动。我不想格式化 hdfs,因为它会更改集群 ID,并且备份将无法使用。
异常(exception)情况:
- 编辑日志中似乎有一处空白。我们期望 txid 71453,但得到 txid 71466
- 客户端试图将提交的 txid 从 71599 向后移动到 71453
- 所需日志的 recoverUnfinalizedSegments 失败。决定将日志同步到 startTxId: 71453 但记录器 10.204.64.26:8485 已经看到 txid 71599 已提交
最佳答案
由于最新的FsImage和Edit已经丢失或损坏,您应该尝试恢复Metadata
./bin/hadoop namenode -recover
引用:NameNode Recovery Tools for the Hadoop Distributed File System
由于日志与namenode不同步,需要重新初始化
./bin/hdfs namenode -initializeSharedEdits
由于恢复后的FsImage丢失了自上次备份以来更新的最新数据,应检查并删除损坏的数据
./bin/hadoop fsck -delete/
如果你不执行 fsck,名称节点可能会卡在安全模式下,因为有太多无响应的 block 。
关于从元数据备份中恢复 Hadoop NameNode,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24119486/