前一篇文章《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基于快照的表修复的更多相关文章

  1. hbase meta表修复

    meta表修复一 查看hbasemeta情况hbase hbck1.重新修复hbase meta表(根据hdfs上的regioninfo文件,生成meta表)hbase hbck -fixMeta2. ...

  2. 【转】hbase meta表修复

    [From]https://www.iteye.com/blog/blackproof-2052898 meta表修复一 查看hbasemeta情况 hbase hbck .重新修复hbase met ...

  3. HBase的快照技术

    (1)     什么是快照 快照就是一份元信息的合集,允许管理员恢复到表的先前状态,快照不是表的复制而是一个文件名称列表,因而不会复制数据. 完全快照恢复是指恢复到之前的表结构以及当时的数据快照之后发 ...

  4. 利用HBase的快照功能来修改表名

    hbase的快照功能常常被用来做数据的恢复的,但是由于项目的特殊需求需要改hbase表的表名.在官网上通过快照功能来修改hbase表名的用法: 下面展示用shell命令的和Java api两种方式: ...

  5. HBase快照、Snapshots 淘宝快照

    淘宝在2011年之前所有的后端持久化存储基本上与我们所认知的意义,  大量存于 mysql .少量 oracle mongdb 等,使用mysql 的原因相信各位也很熟悉了.  开源.社区庞大.解决方 ...

  6. HBase -- 基于HDFS的开源分布式NoSQL数据库

    HBase(Hadoop Database)是一个高可靠性.高性能.面向列.可伸缩的分布式存储系统,我们可以利用HBase技术在廉价的PC上搭建起大规模结构化存储集群.同Google的Bigtable ...

  7. HBase学习笔记之HBase原理和Shell使用

    HBase学习指南之HBase原理和Shell使用 参考资料: 1.https://www.cnblogs.com/nexiyi/p/hbase_shell.html,hbase shell

  8. 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设备直接分 ...

  9. 计算机网络原理和OSI模型与TCP模型

    计算机网络原理和OSI模型与TCP模型 一.计算机网络的概述 1.计算机网络的定义 计算机网络是一组自治计算机的互连的集合 2.计算机网络的基本功能 a.资源共享 b.分布式处理与负载均衡 c.综合信 ...

随机推荐

  1. sqoop与PG库导入导出数据

    导入数据到Hive sqoop import --connect jdbc:postgresql://172.66.6.666/radar5g4h --username postgres --pass ...

  2. 清缓存的姿势不对,真的会出生产bug哦

    最近解决了一个生产bug,bug的原因很简单,就是清理缓存的方式不对.本来没啥好说的,但是考虑到我们有时候确实会在一些小问题上栽跟头,最终决定把这个小故事拿出来跟大家分享下. 风起有一天在撸代码,突然 ...

  3. C++责任链

    #include <iostream> using namespace std; class Base{ protected: Base *next; public: Base(Base ...

  4. unity之初级必备知识

    C#中有两种常见类型:值类型,引用类型.值类型存放在内存中栈里,引用类型在内存中栈里存放引用,实际存放在内存中的堆里.值类型继承自System.ValueType.System.ValueType继承 ...

  5. CodeForces 989C

    题意略. 思路:如图 详见代码: #include<bits/stdc++.h> #define maxn 55 using namespace std; char board[maxn] ...

  6. 利用peerjs轻松玩转webrtc

    随着5G技术的推广,可以预见在不久的将来网速将得到极大提升,实时音视频互动这类对网络传输质量要求较高的应用将是最直接的受益者.而且伴随着webrtc技术的成熟,该领域可能将成为下一个技术热点,但是传统 ...

  7. JSP学习笔记(1)——Jsp指令、动作元素和内置对象

    简单来说,javaweb技术就是让服务器端能够执行Java代码,之后返回数据给客户端(浏览器)让客户端显示数据 jsp页面中可以嵌套java代码(java小脚本)和嵌套Web前端(html,css,j ...

  8. 良许 | 网络检测神器 ss 命令,你可能根本就不会用!

    今天我们来介绍一下 Linux ss 命令. ss 是 Socket Statistics 的缩写,用来统计 socket 连接的相关信息,它跟 netstat 差不多,但有着比 netstat 更强 ...

  9. NLP(十三) 词义消歧

    一个词可能有多个词义 例句 解释 She is my date date: 约会,日期 You have taken too many leaves to skip cleaning leaves i ...

  10. Mysql高手系列 - 第5天:DML操作汇总,确定你都会?

    这是Mysql系列第5篇. 环境:mysql5.7.25,cmd命令中进行演示. DML(Data Manipulation Language)数据操作语言,以INSERT.UPDATE.DELETE ...