HDFS元数据损坏恢复方法

南墨2年前技术文章1030

HDFS JournalNode 编辑目录(dfs.journalnode.edits.dir)下数据损坏(单节点损坏或所有节点数据损坏),如何恢复 HDFS

单节点损坏

a)      停止HDFS服务。

b)      确认editlog没有损坏的JournalNode

JournalNode的运行日志中无java.io.IOException: Can't scan a pre-transactional edit log错误日志,则为editlog没有损坏。

c)       拷贝正常JournalNode上的editlog到损坏的JournalNode节点上。

d)      查看dfs.journalnode.edits.dir的值,获取JournalNodeeditlog的存储目录

e)      备份editlog损坏的JournalNode节点上的editlog

f)       拷贝正常节点的editlog到异常节点。

g)      在异常节点修改拷贝后的文件属组。

h)      重启HDFS服务,启动成功。

所有节点损坏:

a)      找到重启前的主NameNode,进入其数据目录(查看配置项“dfs.namenode.name.dir”可获取),得到最新的FSImage文件的序号。一般如下:

1.png

b)      查看各JournalNode的数据目录(查看配置项“dfs.journalnode.edits.dir”可获取),查看序号从第一部获取到的序号开始的edits文件,看是否有不连续的情况(即前一个edits文件的最后一个序号 后一个edits文件的第一个序号 不是连续的,如下图中的edits_0000000000013259231-0000000000013259237就和后一个edits_0000000000013259239-0000000000013259246就是不连续的)。

2.png

c)       如果有这种不连续的edits文件,则需要查看其它的JournalNode的数据目录或NameNode数据目录中,有没有连续的该序号相关的连续的edits文件。

d)      如果找不到连续的edits文件,需要查看fsimage文件后的编号后的editslog文件是否连续,如连续则说明丢失的未合并部分的数据(数据较新),如以合并则需要恢复至上一个fsimage周期,此周期后的数据需要重新入

3.png

 


相关文章

Ranger中Solr审计日志配置修改

Ranger中Solr审计日志配置修改

1、获取solr 中的rangeraudits的配置#查看其中的配置及 solrctl instancedir --list#获取配置 solrctl instancedir --get rang...

Python 序列化与反序列化

1、为什么要序列化内存中的字典、列表、集合以及各种对象,如何保存到一个文件中?如果是自己定义的类的实例,如何保存到一个文件中?如何从文件中读取数据,并让它们在内存中再次恢复成自己对应的类的实例?要设计...

Kafak顺序写入与数据读取详解

Kafak顺序写入与数据读取详解

生产者(producer)是负责向Kafka提交数据的,Kafka会把收到的消息都写入到硬盘中,它绝对不会丢失数据。为了优化写入速度Kafak采用了两个技术,顺序写入和MMFile。1. 顺序写入因为...

Linux 会话管理

Linux 会话管理

在 terminal 终端中输入命令,这种用户与计算机的临时交互称为一次会话(session)。会话的一个重要特点:与其中启动的进程是连在一起的,打开窗口、会话开始,关闭窗口、会话结束,会话内部的进程...

Hbase region移动

Hbase region移动

1、背景由于hbase 表在创建时没有进行预分区,导致自动分裂的region分布到同一region server上。现将region 手动移动到其他节点,使分布均匀2、操作步骤1、找到要移动的regi...

 oracle11g打补丁31718723报错Operation not permitted

oracle11g打补丁31718723报错Operation not permitted

oracle11g 在打gi补丁的时候报错如下:原因:参考mos(Doc ID 2668094.1)可知因为Linux/Unix平台上,安装后一些Oracle可执行文件的权限需要修改成root。这是以...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。