HDFS的快照原理和Hbase基于快照的表修复
前一篇文章《HDFS和Hbase误删数据恢复》主要讲了hdfs的回收站机制和Hbase的删除策略。根据hbase的删除策略进行hbase的数据表恢复。本文主要介绍了hdfs的快照原理和根据快照进行的数据恢复。
1.Hdfs的快照原理
1.1 快照原理
Hdfs的快照(snapshot)是在某一时间点对指定文件系统拷贝,快照采用只读模式,可以对重要数据进行恢复、防止用户错误性的操作。
快照分两种:一种是建立文件系统的索引,每次更新文件不会真正的改变文件,而是新开辟一个空间用来保存更改的文件,一种是拷贝所有的文件系统。Hdfs属于前者。
Hdfs的快照的特征如下:
1. 快照的创建是瞬间的,代价为O(1),取决于子节点扫描文件目录的时间。
2. 当且仅当做快照的文件目录下有文件更新时才会占用小部分内存,占用内存的大小为O(M),其中M为更改文件或者目录的数量;
3. 新建快照的时候,Datanode中的block不会被复制,快照中只是记录了文件块的列表和大小信息。
4. 快照不会影响正常的hdfs的操作。对做快照之后的数据进行的更改将会按照时间顺序逆序的记录下来,用户访问的还是当前最新的数据,快照里的内容为快照创建的时间点时文件的内容减去当前文件的内容。
每个快照最高限额为65536个文件或者文件夹,在快照的子文件夹中不允许在创建新的快照。
建快照前需要用allowSnapShot命令指定允许做快照的目录:
这个目录下有一个文件:
开始新建快照,取名为clcshot1:
在目录下有一个.snapshot的文件夹,里面有针对该目录的所有快照,每个目录下都存有当前快照的目录:
往一个文件里append数据,更改文件的内容:
文件大小发生了更改:
快照文件夹中还是原始大小,说明hdfs为更改文件开辟了新的空间。
尝试删除创建快照的目录:
删除失败,想要删除该目录,需要将快照都删除。
再创建一个snapshot:
在namenode首页上可以看到整个hdfssnapshot的信息:
比较同一个目录下不同版本快照的区别,用命令snapshotDiff:
1.2 快照数据恢复
清空/tmp/caolch/中的数据,可以用任何一个快照版本进行恢复。
恢复命令就是简单的cp。
首先清空/tmp/caolch下的所有文件。
然后将快照中的数据cp到需要恢复的目录。
注意,mv命令和del命令是不允许的,因为快照是只读的。
2.Hbase的基于快照的表修复
Hdfs的快照同样适用于hbase表的恢复。在hbase的数据表目录/hbase/data/default/(default为默认namespace空间)中新建快照,就会在该目录下生成.snapshot的文件夹,里面放着针对该目录的所有快照。
如果存在用户误删hbase表,
将快照中保存的数据表文件夹cp到/hbase/data/default下,然后执行如下命令,修复元数据即可。
注意:cp到/hbase/data/default目录下的数据表文件夹的权限要修改成hbase:hbase。
否则修改元数据的命令会失败。
上面是对整个hbase的namespace空间进行的快照备份,如果在某一个表目录下建快照,那么这个表目录就会变成只读,在hbase shell中执行disable+drop <tablename>不会将表删除,在建快照之后新增的表数据也不会丢失。
虽然数据不会丢失但是元数据会被drop命令删除,还得用repair命令进行修复。
修复完之后,再enable这个表,就ok了。
HDFS的快照原理和Hbase基于快照的表修复的更多相关文章
- hbase meta表修复
meta表修复一 查看hbasemeta情况hbase hbck1.重新修复hbase meta表(根据hdfs上的regioninfo文件,生成meta表)hbase hbck -fixMeta2. ...
- 【转】hbase meta表修复
[From]https://www.iteye.com/blog/blackproof-2052898 meta表修复一 查看hbasemeta情况 hbase hbck .重新修复hbase met ...
- HBase的快照技术
(1) 什么是快照 快照就是一份元信息的合集,允许管理员恢复到表的先前状态,快照不是表的复制而是一个文件名称列表,因而不会复制数据. 完全快照恢复是指恢复到之前的表结构以及当时的数据快照之后发 ...
- 利用HBase的快照功能来修改表名
hbase的快照功能常常被用来做数据的恢复的,但是由于项目的特殊需求需要改hbase表的表名.在官网上通过快照功能来修改hbase表名的用法: 下面展示用shell命令的和Java api两种方式: ...
- HBase快照、Snapshots 淘宝快照
淘宝在2011年之前所有的后端持久化存储基本上与我们所认知的意义, 大量存于 mysql .少量 oracle mongdb 等,使用mysql 的原因相信各位也很熟悉了. 开源.社区庞大.解决方 ...
- HBase -- 基于HDFS的开源分布式NoSQL数据库
HBase(Hadoop Database)是一个高可靠性.高性能.面向列.可伸缩的分布式存储系统,我们可以利用HBase技术在廉价的PC上搭建起大规模结构化存储集群.同Google的Bigtable ...
- HBase学习笔记之HBase原理和Shell使用
HBase学习指南之HBase原理和Shell使用 参考资料: 1.https://www.cnblogs.com/nexiyi/p/hbase_shell.html,hbase shell
- KVM 介绍(7):使用 libvirt 做 QEMU/KVM 快照和 Nova 实例的快照 (Nova Instances Snapshot Libvirt)
学习 KVM 的系列文章: (1)介绍和安装 (2)CPU 和 内存虚拟化 (3)I/O QEMU 全虚拟化和准虚拟化(Para-virtulizaiton) (4)I/O PCI/PCIe设备直接分 ...
- 计算机网络原理和OSI模型与TCP模型
计算机网络原理和OSI模型与TCP模型 一.计算机网络的概述 1.计算机网络的定义 计算机网络是一组自治计算机的互连的集合 2.计算机网络的基本功能 a.资源共享 b.分布式处理与负载均衡 c.综合信 ...
随机推荐
- 重学计算机组成原理(六)- 函数调用怎么突然Stack Overflow了!
用Google搜异常信息,肯定都访问过Stack Overflow网站 全球最大的程序员问答网站,名字来自于一个常见的报错,就是栈溢出(stack overflow) 从函数调用开始,在计算机指令层面 ...
- 8.12 day31 进程间通信 Queue队列使用 生产者消费者模型 线程理论 创建及对象属性方法 线程互斥锁 守护线程
进程补充 进程通信 要想实现进程间通信,可以用管道或者队列 队列比管道更好用(队列自带管道和锁) 管道和队列的共同特点:数据只有一份,取完就没了 无法重复获取用一份数据 队列特点:先进先出 堆栈特点: ...
- OpenResty 社区王院生:APISIX 的高性能实践
2019 年 7 月 6 日,OpenResty 社区联合又拍云,举办 OpenResty × Open Talk 全国巡回沙龙·上海站,OpenResty 软件基金会联合创始人王院生在活动上做了&l ...
- git使用WebHook实现自动构建
说明 我们使用git进行版本管理常常会遇到这样的一个需求,希望git push的时候服务器上代码的代码也能自动更新,这次我使用了coding进行示范 一.编写git pull 更新脚本 auth_pu ...
- ASP.NET 一个页上需要显示多个验证码
1.后台获取验证字节流,以字符串的形式返回到前端. public ActionResult GetValidateGraphic() { var validate = new ValidateCode ...
- SpringBoot:实现定时任务
一.定时任务实现的几种方式: Timer 这是java自带的java.util.Timer类,这个类允许你调度一个java.util.TimerTask任务.使用这种方式可以让你的程序按照某一个频度执 ...
- VS引用文件出现黄色感叹号丢失文件,应该如何解决?
VS是微软开发的一款超级强大的IDE,深受广大.net开发者喜爱. 但是再强大,也会有它的bug和缺点. 多人协同开发时,不知道你有没有遇到一个这样的情况:第二天上班,早早来到公司,打开电脑,拉取一下 ...
- Java进程故障排查
故障分析 # 导致系统不可用情况(频率较大): 1)代码中某个位置读取数据量较大,导致系统内存耗尽,进而出现Full GC次数过多,系统缓慢: 2)代码中有比较消耗CPU的操作,导致CPU过高,系统运 ...
- go 学习笔记之详细说一说封装是怎么回事
关注公众号[雪之梦技术驿站]查看上篇文章 猜猜看go是不是面向对象语言?能不能面向对象编程? 虽然在上篇文章中,我们通过尝试性学习探索了 Go 语言中关于面向对象的相关概念,更确切的说是关于封装的基本 ...
- 区间K大数
区间K大数 问题描述 给定一个序列,每次询问序列中第l个数到第r个数中第K大的数是哪个. 输入格式 第一行包含一个数n,表示序列长度. 第二行包含n个正整数,表示给定的序列. 第三个包含一个正整数m, ...