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

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

最新文章

  1. FMDB的使用方法
  2. UUID库
  3. 获取文本的编码类型(from logparse)
  4. centos7系统管理和运维实战
  5. [综] Latent Dirichlet Allocation(LDA)主题模型算法
  6. CentOS安装PHP和mysql
  7. HLSL之漫反射光
  8. 在 Area 中使用RouteAttribute 定义路由, 并支持多语言
  9. USB协议-检测设备连接与速度
  10. C# 中通过API实现的打印类
  11. pymol编译
  12. javascript权威指南学习笔记2
  13. PC--CSS技巧
  14. latex表格线的颜色设置(边框添加颜色)
  15. PLECS_晶闸管调速系统_9w
  16. 白盒测试实践-day03
  17. MongoDB慢查询性能分析
  18. ACM总结——2017区域赛网络赛总结
  19. 报数的golang实现
  20. Gradle - Manifest

热门文章

  1. TensorFlow之张量
  2. Python2.7集成scrapy爬虫错误解决
  3. java安全编码指南之:异常处理
  4. Centos-yum软件包安装-yum
  5. 使用Ajax新闻系统管理需求分析
  6. 实验 5:OpenFlow 协议分析和 OpenDaylight 安装
  7. 076 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 01 初识面向对象 01 Java面向对象导学
  8. 剑指Offer(四):重建二叉树
  9. matlab进行FIR滤波器设计(一)
  10. C# Dropdownlist设置选择项