摘要:分享一个HBase集群复原的办法。
背景
在HBase 1.x中,常常会遇到元数据不统一的状况,这个时候应用HBCK的命令,能够疾速修复元数据,让集群恢复正常。
另外HBase数据迁徙时,大家常常应用到一种迁徙形式是:拷贝HBase的数据目录/hbase/data/default到新的集群,而后在新集群执行HBCK的命令让元数据重建,这种拷贝数据目录而后复原元数据的形式是一种疾速间接的伎俩。
HBase降级到2.X版本之后,hbase hbck中的一些修复命令曾经不再反对,包含,所以在HBase遇到集群故障,无奈通过HBCK疾速把元数据修复,通过HBase数据目录迁徙的形式也就应用不了。
在HBase 2.X的客户端执行hbase hbck时,罕用的fixMeta命令曾经不再反对。
hbck-1无奈应用
HBase 2.X版本增强了可靠性,因为应用了 procedure,因为之前的hbck(hbck-1)是会间接去向region server或者hdfs发送申请进行修复,而在HBase 2.0版本上集群外部操作全副都被挪到了procedure v2(下文都称为procedure)上进行解决。
因为所有的命令都是通过master来协调解决,所以在修复时也须要通过master进行修复。否则反而可能导致更重大的不统一问题。所以hbck-1在HBase 2.x版本是不实用的。
HBase2.X版本中元数据的复原办法
1. 批改配置hbase.assignment.skip.empty.regions=false
如果是一般的hbase:meta零碎表中的元数据不正确,在批改完此参数重启HBase后就曾经能复原
当第一步骤实现后还不能修复,就要应用上面的命令了
例如启动后发现,hbase shell能list出数据,然而表无奈put或者scan,这时候hbase:meta表里的t1表记录其实是不正确的
2. hbase org.apache.hadoop.hbase.util.hbck.OfflineMetaRepair -fix
这个命令须要进行HBase而后执行。
当表的数据目录存在(/hbase/data/default/<table>),而在hbase:meta表中元数据不正确时,须要HBase进行后,执行这个meta表修复命令,
执行实现后,启动HBase。
启动实现后,查看hbase:meta表的用户表记录,能够看到t1表的元数据都生成了。
3. 此时用户表就复原了,如果还存在region空洞fixHdfsHoles或者fixHdfsOverlaps问题,能够应用hbck1中的["-fixHdfsHoles -fixHdfsOrphans -fixHdfsOverlaps -fixReferenceFiles"]
在华为云EI内核团队的hbase2中,曾经将这4个命令从新集成进hbck-1中,便于保护。
新集群清理及数据迁徙
看完下面的元数据恢复,应该就晓得接下来的这种HBase数据迁徙形式的原理:通过拷贝数据目录,让HBase元数据与业务数据目录从新建设关系,达到业务失常读写。
上面例子只思考用户应用default命名空间
- 拷贝旧集群的HBase数据目录到新集群,将旧集群的/hbase/data/default目录拷贝到了hdfs上的/mydata/目录;
- 如果新集群数据不须要清理,则跳过此步骤
进行HBase
革除HBase在数据存储目录,hdfs dfs -rm -r /hbase
革除HBase在zk的节点,应用ZK客户端工具zkCli.sh –server <ZK NODE>:2181 进入后执行deleteall /hbase
启动HBase,让目录构造主动生成
- 放弃HBase集群进行状态,拷贝旧机器数据目录到新集群HBase的数据目录中;
hdfs dfs -cp /mydata/default/* /hbase/data/default/
- 执行hbase修复命令hbase org.apache.hadoop.hbase.util.hbck.OfflineMetaRepair –fix
- 设置hbase.assignment.skip.empty.regions=false并启动HBase
运行完上述步骤,在新的集群就能对迁徙过去的HBase进行业务拜访了。
点击关注,第一工夫理解华为云陈腐技术~