技术实操丨HBase 2.X版本的元数据修复及一种数据迁移方式
摘要:分享一个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进行业务访问了。
技术实操丨HBase 2.X版本的元数据修复及一种数据迁移方式的更多相关文章
- 动手实操丨RC522射频卡模块与IC卡完成充值消费查询的技术实现思路
摘要:一文手把手教你利用RC522射频卡模块与IC卡完成充值消费查询的技术实现思路. 本文分享自华为云社区<RC522射频卡模块与IC卡完成充值消费查询的技术实现思路 ...
- Core Data 版本数据迁移
Core Data版本迁移基础 通常,在使用Core Data的iOS App上,不同版本上的数据模型变更引发的数据迁移都是由Core Data来负责完成的.这种数据迁移模式称为Lightweight ...
- Java初学者作业——编写JAVA程序,要求输入技术部门5位员工的理论成绩和实操成绩,计算并输出各位员工的最终评测成绩。
返回本章节 返回作业目录 需求说明: 某软件公司要求对技术部门的所有员工进行技能评测,技术评测分为两个部分:理论部分以及实操部分,最终评测成绩=理论成绩×0.4+实操成绩×0.6,要求输入技术部门5位 ...
- Hadoop Hbase理论及实操
Hbase特点 HBase是一个构建在HDFS上的分布式列存储系统:HBase是基于Google BigTable模型开发的,典型的key/value系统:HBase是Apache Hadoop生态系 ...
- ABP入门系列(1)——学习Abp框架之实操演练
作为.Net工地搬砖长工一名,一直致力于挖坑(Bug)填坑(Debug),但技术却不见长进.也曾热情于新技术的学习,憧憬过成为技术大拿.从前端到后端,从bootstrap到javascript,从py ...
- SBT实操指南
参考资料:1.英文官方文档2.中文官方文档,内容翻译的不全 SBT是类似maven和gradle的自动构建和包依赖管理工具,SBT是Scala技术体系下的包管理工具,都是Lightbend公司开发的, ...
- 第十章 Fisco Bcos 权限控制下的数据上链实操演练
一.目的 前面已经完成fisco bcos 相关底层搭建.sdk使用.控制台.webase中间件平台等系列实战开发, 本次进行最后一个部分,体系化管理区块链底层,建立有序的底层控管制度,实现权限化管理 ...
- 百度NLP预训练模型ERNIE2.0最强实操课程来袭!【附教程】
2019年3月,百度正式发布NLP模型ERNIE,其在中文任务中全面超越BERT一度引发业界广泛关注和探讨.经过短短几个月时间,百度ERNIE再升级,发布持续学习的语义理解框架ERNIE 2.0,及基 ...
- 大数据学习笔记——Linux完整部署篇(实操部分)
Linux环境搭建完整操作流程(包含mysql的安装步骤) 从现在开始,就正式进入到大数据学习的前置工作了,即Linux的学习以及安装,作为运行大数据框架的基础环境,Linux操作系统的重要性自然不言 ...
随机推荐
- redis实现计数器
用redis实现计数器 社交产品业务里有很多统计计数的功能,比如: 用户: 总点赞数,关注数,粉丝数 帖子: 点赞数,评论数,热度 消息: 已读,未读,红点消息数 话题: 阅读数,帖子数,收藏数 统计 ...
- redis命令和RedisTemplate操作对应表
redis命令和RedisTemplate操作对应表 redisTemplate.opsForValue();//操作字符串 redisTemplate.opsForHash();//操作hash r ...
- Spring学习(七)bean装配详解之 【通过注解装配 Bean】【自动装配的歧义解决】
自动装配 1.歧义性 我们知道用@Autowired可以对bean进行注入(按照type注入),但如果有两个相同类型的bean在IOC容器中注册了,要怎么去区分对哪一个Bean进行注入呢? 如下情况, ...
- Android开发中导入第三方库所遇问题记录
1.重复循环依赖的问题 (1)需求 如下图所示: 在Android 项目中,采用模块化开发,一个是主跑application--Mudule A,另外一个是library--Library B 1)M ...
- Hadoop框架:集群模式下分布式环境搭建
本文源码:GitHub·点这里 || GitEE·点这里 一.基础环境配置 1.三台服务 准备三台Centos7服务,基础环境从伪分布式环境克隆过来. 133 hop01,134 hop02,136 ...
- You must give at least one requirement to install (see "pip help install")
语言: python why? install 后面没有参数,也就是说没有给想要安装的包 way? pip install 后面要跟想要安装的包名
- 006 01 Android 零基础入门 01 Java基础语法 01 Java初识 06 使用Eclipse开发Java程序
006 01 Android 零基础入门 01 Java基础语法 01 Java初识 06 使用Eclipse开发Java程序 Eclipse下创建程序 创建程序分为以下几个步骤: 1.首先是创建一个 ...
- c++中 #define和const的区别
来源参考:https://blog.csdn.net/yi_ming_he/article/details/70405364 这个区别用从几个角度来说: 角度1: 就定义常量说的话: const 定 ...
- Metasploit简单使用——后渗透阶段
在上文中我们复现了永恒之蓝漏洞,这里我们学习一下利用msf简单的后渗透阶段的知识/ 一.meterperter常用命令 sysinfo #查看目标主机系统信息 run scraper #查看目标主机详 ...
- Django Croppie
下载 Django CroppieDjango Croppie django -croppie是一个简单集成croppie.js图像cropper到django项目的应用程序. 安装 安装与pip安装 ...