写点什么

技术实操丨 HBase 2.X 版本的元数据修复及一种数据迁移方式

发布于: 2020 年 10 月 21 日

摘要:分享一个 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 命名空间


1. 拷贝旧集群的 HBase 数据目录到新集群,将旧集群的/hbase/data/default 目录拷贝到了 hdfs 上的/mydata/目录;


2. 如果新集群数据不需要清理,则跳过此步骤


停止 HBase


清除 HBase 在数据存储目录,hdfs dfs -rm -r /hbase


清除 HBase 在 zk 的节点,使用 ZK 客户端工具 zkCli.sh –server <ZK NODE>:2181 进入后执行 deleteall /hbase


启动 HBase,让目录结构自动生成


3. 保持 HBase 集群停止状态,拷贝旧机器数据目录到新集群 HBase 的数据目录中;


hdfs dfs -cp /mydata/default/* /hbase/data/default/


4. 执行 hbase 修复命令 hbase org.apache.hadoop.hbase.util.hbck.OfflineMetaRepair –fix


5. 设置 hbase.assignment.skip.empty.regions=false 并启动 HBase


运行完上述步骤,在新的集群就能对迁移过来的 HBase 进行业务访问了。


点击关注,第一时间了解华为云新鲜技术~


发布于: 2020 年 10 月 21 日阅读数: 118
用户头像

提供全面深入的云计算技术干货 2020.07.14 加入

华为云开发者社区,提供全面深入的云计算前景分析、丰富的技术干货、程序样例,分享华为云前沿资讯动态,方便开发者快速成长与发展,欢迎提问、互动,多方位了解云计算! 传送门:https://bbs.huaweicloud.com/

评论

发布
暂无评论
技术实操丨HBase 2.X版本的元数据修复及一种数据迁移方式