摘要: 分享一个 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 进行业务拜访了。
点击关注,第一工夫理解华为云陈腐技术~