当前位置 博文首页 > 文章内容

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

    作者: 栏目:未分类 时间:2020-10-21 15:01:52

    本站于2023年9月4日。收到“大连君*****咨询有限公司”通知
    说我们IIS7站长博客,有一篇博文用了他们的图片。
    要求我们给他们一张图片6000元。要不然法院告我们

    为避免不必要的麻烦,IIS7站长博客,全站内容图片下架、并积极应诉
    博文内容全部不再显示,请需要相关资讯的站长朋友到必应搜索。谢谢!

    另祝:版权碰瓷诈骗团伙,早日弃暗投明。

    相关新闻:借版权之名、行诈骗之实,周某因犯诈骗罪被判处有期徒刑十一年六个月

    叹!百花齐放的时代,渐行渐远!



    摘要:分享一个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进行业务访问了。

     

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