基于物理文件的HBase备份还原
前提说明:
1、HBase数据分表,所以备份的粒度是表。
2、备份的内容为Azure的Blob存储。
HBase Blob备份
备份时,需要先将表disable,以保持数据一致性。
备份的工具可以用Azcopy,或者Azure Client等。各种工具另一篇单独介绍。其它没什么可说的。
备份完成后,相应的表可以drop或进行其它操作。
HBase Blob还原
HBase中之前不存在该表(或者之前删除的很干净)
这种场景下,还原比较容易。步骤如下。
1、将数据所在的Folder(以表名为文件夹名)复制到存储账号/容器/hbase/data/default目录下。Folder对应的同名Blob文件(记录权限等属性)不需要复制。
2、在HBase中执行数据恢复的命令(TaskLog为表名):
hbase hbck -repair 'TaskLog' -ignorePreCheckPermission -fixMeta
3、scan 'TaskLog' 查看还原的结果。
遇到的问题及解决方案
通过Azcopy复制过来的文件可以恢复,但是通过AzureClient API复制过来的文件在进行恢复时报错:
[main] util.HBaseFsck: Unable to read .tableinfo from wasb://hdptestjn@hdptestjn.blob.core.chinacloudapi.cn/hbase
org.apache.hadoop.hbase.TableInfoMissingException: No table descriptor file under wasb://hdptestjn@hdptestjn.blob.core.chinacloudapi.cn/hbase/data/default/CM_EvcRegisterBatteryInfo
at org.apache.hadoop.hbase.util.FSTableDescriptors.getTableDescriptorFromFs(FSTableDescriptors.java:513)
at org.apache.hadoop.hbase.util.FSTableDescriptors.getTableDescriptorFromFs(FSTableDescriptors.java:500)
at org.apache.hadoop.hbase.util.FSTableDescriptors.getTableDescriptorFromFs(FSTableDescriptors.java:480)
at org.apache.hadoop.hbase.util.HBaseFsck.loadHdfsRegionInfos(HBaseFsck.java:1182)
at org.apache.hadoop.hbase.util.HBaseFsck.onlineConsistencyRepair(HBaseFsck.java:660)
at org.apache.hadoop.hbase.util.HBaseFsck.onlineHbck(HBaseFsck.java:697)
at org.apache.hadoop.hbase.util.HBaseFsck.exec(HBaseFsck.java:4751)
at org.apache.hadoop.hbase.util.HBaseFsck$HBaseFsckTool.run(HBaseFsck.java:4552)
at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:76)
at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:90)
at org.apache.hadoop.hbase.util.HBaseFsck.main(HBaseFsck.java:4540)
报错原因:通过AzureClient API复制文件时,把权限给搞丢了。
正常的权限信息如下:

文件夹(对应的blob)的属性有两个:hdi_isfolder=true,hdi_permission={"owner":"hdp","group":"supergroup","permissions":"rwxr-xr-x"}
文件的属性有一个:hdi_permission={"owner":"hdp","group":"supergroup","permissions":"rw-r--r--"}
解决方案:通过AzureClient API复制文件时,添加以上权限信息。注意owner和group要修改成目标HBase所有Linux系统的实际用户和组。
另外,通过Azcopy复制文件时,权限信息带过来了,但owner和group仍旧是源文件的属性。如果源和目标的用户/组不一致时,会产生权限的问题,需要注意。
HBase中之前存在该表(或者之前删除的不彻底)
HBase如果已经存在该表,或曾经存在过而元数据清理不彻底,则在恢复时可能会出错。
所以,下面是清理元数据的方案。清理完毕后,再采用上面的方案进行恢复即可。
1、查看HDFS文件,是否存在相应的目录,如果有,则删除:
hdfs dfs -rmr /hbase/data/default/TaskLog
2、查看zookeeper中是否还有元数据 的残留,如果有,则删除:
1)进入zookeeper的bin目录,如: /usr/hdp/2.5.0.0-1245/zookeeper/bin/
2)连接某一个zookeeper节点,如,执行:./zkCli.sh -server 10.0.0.13:2181
3)查看目录(ls /hbase-unsecure/table)下是否存在表TaskLog,如果有,则删除,即执行命令:
rmr /hbase-unsecure/table/TaskLog
3、重新修复HBase的表结构,执行命令:
hbase hbck -ignorePreCheckPermission -fixMeta
4、清理完毕后,即可进行还原操作。
基于物理文件的HBase备份还原的更多相关文章
- HBase备份还原OpenTSDB数据之Snapshot
前言 本文基于伪分布式搭建 hadoop+zookeeper+hbase+opentsdb之后,想了解前因后果的可以看上一篇和上上篇. opentsdb在hbase中生成4个表(tsdb, tsdb- ...
- HBase备份还原OpenTSDB数据之Export/Import(增量+全量)
前言 本文基于伪分布式搭建 hadoop+zookeeper+hbase+opentsdb之后,文章链接:https://www.cnblogs.com/yybrhr/p/11128149.html, ...
- mongoDB整个文件夹拷贝备份还原的坑
现网有一个mongoDB数据库需要搬迁到新服务器,开发那边的要求是先搬迁现在的数据库过去,然后剩下的以后他们用程序同步. 数据库大楷20G左右,现网是主备仲裁的,停掉备点,拷贝了全部文件. 新服务器也 ...
- 基于xtrabackup实现mysql备份还原
简介 Xtrabackup2.2版之前包括4个可执行文件: innobackupex: Perl 脚本 xtrabackup: C/C++ 编译的二进制 xbstream: 支持并发写的流文件格式 x ...
- (4.16)mysql备份还原——物理备份之XtraBackup实践
关键词:XtraBackup实践,物理备份,xtrabackup备份,innobackupex备份 [1]如何使用? [3]系列:innobackupex --help |more [4]系列:xtr ...
- MySQL数据库备份还原(基于binlog的增量备份)
MySQL数据库备份还原(基于binlog的增量备份) 一.简介 1.增量备份 增量备份 是指在一次全备份或上一次增量备份后,以后每次的备份只需备份与前一次相比增加或者被修改的文件.这就意味 ...
- SQL Server 大数据搬迁之文件组备份还原实战
一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 解决方案(Solution) 搬迁步骤(Procedure) 搬迁脚本(SQL Codes) ...
- 文件操作 系统备份和还原,压缩,解压 tar dump/restore
基本操作命令: ls -a 显示指定目录下的目录和文件,包括隐藏的文件和目录 ls -l 将文件和目录详细列出来,包括文件状态,权限,拥有者,文件名,文件大小等 改变工作目录命令 cd cd .. 进 ...
- SQL Server 数据库备份还原和数据恢复
认识数据库备份和事务日志备份 数据库备份与日志备份是数据库维护的日常工作,备份的目的是在于当数据库出现故障或者遭到破坏时可以根据备份的数据库及事务日志文件还原到最近的时间点将损失降到最低点. 数据 ...
随机推荐
- final关键字的特点
1.这个关键字是一个修饰符,可以修饰类,方法,变量. 2.被final修饰的类是一个最终类,不可以被继承. 3.被final修饰的方法是一个最终方法,不可以被覆盖. 4.被final修饰的变量是一个常 ...
- SpringFramework中重定向
需求: 需要在两个@Controller之间跳转,实现重定向 解决: @PostMapping("/files/{path1}") public String upload(... ...
- Sass、Less、Stylus,我选Sass!
Sass官网 | Sass中文 简介:待添加 Less 简介:待添加 Stylus 简介:待添加
- HTTP协议笔记整理
有人说过,精通HTTP协议能赢过95%的前端工程师,所以我毅然的踏上这条路,哈哈哈,接下来把自己的学习笔记整理出来. 我会从比较底层的模型开始: 1.网络的五层模型 2.TCP/IP协议 3.HTTP ...
- (C#) 多线程访问探讨,如果保证线程安全?
先抛出几点疑问: 1. 多个线程同时访问同一个“值类型变量“(value type, stored in stack), 如果保证安全访问? 2. 多个线程同时访问同一个“引用类型变量“(refere ...
- Android 简单图片浏览器 读取sdcard图片+形成缩略图+Gallery
1.读取SD卡上面的图片信息 //想要的返回值所在的列 String[] projection = { MediaStore.Images.Thumbnails._ID}; //图片信息存储在 and ...
- Totem协议(SRP/RRP)讲解
基本概念 •SRP: The Totem Single-Ring Ordering and MembershipProtocol –基于以太网的组通信协议,节点间组成单环结构 ...
- 使用 js 实现文本过多时隐藏部分文本
使用 js 实现文本过多时隐藏部分文本 情景描述: 有时候我们需要显示部分文字,就像 QQ 空间这样,先显示部分文字,加一个[查看全文],让用户选择是否查看全部 解决方法: 第一步:在一个 id 为 ...
- Angular之 Scope和 Directive
---------------------------Scope-------------------------------- https://docs.angularjs.org/guide/sc ...
- INSERT 语句总结
一.基本语句 1.向指定的列中插入值(在插入批量数据时方式2优于方式1) <!--插入一条值--> INSERT INTO t1(field1,field2) VALUE(v001,v00 ...