基于物理文件的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 数据库备份还原和数据恢复
认识数据库备份和事务日志备份 数据库备份与日志备份是数据库维护的日常工作,备份的目的是在于当数据库出现故障或者遭到破坏时可以根据备份的数据库及事务日志文件还原到最近的时间点将损失降到最低点. 数据 ...
随机推荐
- fb登陆遇到傻逼问题
centos中curl需要ssl的支持, 所以我重新安装了curl,并安装了openssl-devel,这个是依赖,必须的. so 完美
- BZOJ4011: [HNOI2015]落忆枫音(dp 乘法原理)
题意 题目链接 Sol 非常妙的一道题 设\(inder[i]\)表示\(i\)号节点的度数 首先如果是个DAG的话,可以考虑在每个点的入边中选一条边作为树形图上的边,这样\(ans = \prod_ ...
- 20个实用便捷的CSS3工具、库及实例
编者按:坊间传闻,有本CSS的高手炼成秘籍在江湖失传已久,书中所载,多为最新的惊人技术与实例示范,是为集大成者,一旦学成,代码效率猛增,功力提升数倍,今日偶获,不敢怠慢,赶紧发到优设,望人人受益.说人 ...
- JS 数据容量转换/换算
function diskSize(num){ if (num == 0) return '0 B'; var k = 1024; //设定基础容量大小 var sizeStr = ['B','KB' ...
- position布局影响点击事件以及冒泡获取事件目标
在编写功能时总是会出现很多意想不到的问题,现在就讲讲我遇到的两个问题,通过举一个相似的例子来解说. <1> 元素互相独立,不存在包含于被包含 选择城市的按钮,为它绑定点击事件,点击后就弹出 ...
- Java设计模式—代理模式
代理模式(Proxy Pattern)也叫做委托模式,是一个使用率非常高的模式. 定义如下: 为其他对象提供一种代理以控制对这个对象的访问. 个人理解: 代理模式将原类进行封装, ...
- Java快速入门-03-小知识汇总篇(全)
Java快速入门-03-小知识汇总篇(全) 前两篇介绍了JAVA入门的一系小知识,本篇介绍一些比较偏的,说不定什么时候会用到,有用记得 Mark 一下 快键键 常用快捷键(熟记) 快捷键 快捷键作用 ...
- volley7--NetworkDispatcher从网络中获取数据
源码: /* * Copyright (C) 2011 The Android Open Source Project * * Licensed under the Apache License, V ...
- 通过注解实现Spring 声明式事务管理
小Alan接着上一篇Spring事务管理入门与进阶做一些补充,如果对Spring事务管理还不了解的可以看看上一篇文章. 实例 在我们开始之前,至少有两个数据库表是至关重要的,在事务的帮助下,我们可以实 ...
- 结对编程项目总结(core2组)
结对编程项目总结(core2组) 作业---四则运算(Core 第二组) ----by 吴雪晴 PB16061514 齐天杨 PB16060706 一.项目简介 项目的任务为制作一个给(貌似是?) ...