HBase的Snapshots功能介绍


hbase的snapshot功能还是挺有用的,本文翻译自cloudera的一篇博客,希望对想了解snapshot 的朋友有点作用,如果翻译得不好的地方,请查看原文 Introduction
to Apache HBase Snapshots
  对照。

在之前,备份或者拷贝一个表只能用copy/export表,或者disable表后,从hdfs中拷贝出所有hfile。copy/export表用的是MapReduce来scan和copy表,这会对Region Server产生直接的性能影响,而用disable后拷贝文件则是直接不能访问了。

以此相反,HBase的snapshots功能可以让管理员不用拷贝数据的情况下轻松拷贝table,并且只会对RS造成很小影响。导出snapshots到另一个集群不会直接作用于RS,只是添加一些额外的逻辑。

下面是一些实用snapshots的场景:

  • 从用户/app错误中恢复

    • 从某个已知的安全状态恢复/还原。
    • 查看之前的snapshots并选择性地从merge到产线中。
    • 在重大升级或者修改之前保存snapshots。
  • 审查和/或报告指定时间的数据视图
    • 有目的性地按月采集数据。
    • 运行每天/每月/一刻时间报表。
  • 应用测试
    • 用snapshots在产线测试schema或者程序改变对数据相似度的影响,然后丢弃它。例如,获取一个snapshot,然后用该snapshot的内容创建一个表,然后对该表进行操作。
  • 离线作业
    • 获取一个snapshot,导到另外一个集群并用MapReduce作业来分析它。由于导出snapshot的操作发生在HDFS级别,你不会像拷贝表那样拖慢HBase。

什么是Snapshot?

一个snapshot其实就是一组metadata信息的集合,它可以让管理员将表恢复到以前的一个状态。snapshot并不是一份拷贝,它只是一个文件名的列表,并不拷贝数据。一个全的snapshot恢复以为着你可以回滚到原来的表schema和创建snapshot之前的数据。

操作

  • 获取:该操作尝试从指定的表中获取一个snapshot。该操作在regions作balancing,split或者merge等迁移工作的时候可能会失败。
  • 拷贝:该操作用指定snapshot的schema和数据来创建一个新表。该操作会不会对 原表或者该snapshot造成任何影响。
  • 恢复: 该操作将一个表的schema和data回滚到创建该snapshot时的状态。
  • 删除:该操作将一个snapshot从系统中移除,释放磁盘空间,不会对其他拷贝或者snapshot造成任何影响。
  • 导出:该操作拷贝这个snapshot的data和metadata到另一个集群。该操作仅影响HDFS,并不会和hbase的Master或者Region Server通信(这些操作可能会导致集群挂掉)。

零拷贝Snapshot,恢复,克隆

snapshot和CopyTable/ExportTable最大的区别是snapshot仅涉及metadata,不涉及数据拷贝。

Hbase一个重要的设计就是一旦写到一个文件就不会修改了。有不可修改的文件意味着一个snapshot仅需保持当前文件的使用相关信息就可以了, 并且,当compaction发生的时候,snapshot通知hbase系统仅把这些文件归档而不要删除它。

同样,当克隆或者恢复操作发生的时候,由于这些不变的文件,当用snapshot创建新表的时候仅需链接向这些不变的文件就行了。

导出snapshot是唯一需要拷贝数据的操作,这是因为其它的集群并没有这些数据文件。

导出Snapshot Vs Copy/Export Table

除去更加好的一致性保证外,和Copy/Export作业相比,最大的不同是导出snapshot操作是在HDFS层级进行的。这就意味着hbase的master和Region Server是不参与该操作的,因此snapshot导出不会创建一些不必要的数据缓存,并且也不会因为由于很多scan操作导致的GC。snapshot导出操作产生的网络和磁盘开销都被HDFS的datanode分摊吸收了。

HBase Shell: Snapshot 操作

要想使用snapshot功能,请确认你的hbase-site.xml中的hbase.snapshot.enabled 配置项为true,如下:

1  <property>
2     
3 <name>hbase.snapshot.enabled</name>
4  
5     <value>true</value>
6   
7 </property>

创建一个snapshot用如下命令,该操作没有文件拷贝操作:

1 hbase>
snapshot ‘tableName’, ‘snapshotName’

要想知道系统中创建了哪些snapshot,可以用list_snapshot命令,它会显示snapshot名,源表和创建时间日期。

1 hbase>
list_snapshots
2 SNAPSHOT              
TABLE + CREATION TIME
3  TestSnapshot         
TestTable (Mon Feb 
25 21:13:49 +0000 2013)</pre>

要想移除snapshot,用delete_snapshot命令,移除snapshot不会对已经克隆好的表胡总和随后发生的snapshot造成任何影响。

1 hbase>
delete_snapshot ‘snapshotName’

要想使用snapshot来创建一个新表,用clone_snapshot命令。该操作也无任何数据拷贝操作发生。

1 hbase>
clone_snapshot ‘snapshotName’, ‘newTableName’

要是想恢复或者替换当前表的schema和数据,用restore_snapshot命令。

1 hbase>
restore_snapshot ‘snapshotName’

要想导出一个snapshot到另外的集群,用ExportSnapshot工具。导出操作不会对Region server造成额外的负担。因为它工作在HDFS层级,你仅需指定HDFS的位置(其它集群的hbase.rootdir)即可,如下。

1 hbase
org.apache.hadoop.hbase.snapshot.ExportSnapshot -snapshot
2 SnapshotName
-copy-to hdfs:
///srv2:8082/hbase

当前存在的限制

Snapshots依赖于一些想当然的地方,当前还有很多新特性并没有完全集成到工具里:

  • 做snapshot或者克隆表时如果发生Merging region操作时数据可能丢失。
  • 恢复表的时候,由于是对一个replication进行的,这可能导致两个集群数据不同步。

总结

当前的snapshot特性以及包括了所有基本功能,但是依然还有很多工作要做,例如质量(metrics),Web UI集成,磁盘使用优化等。

要想了解更多snapshot相关信息,请看官方文档的snapshot一节。

HBase的Snapshots功能介绍的更多相关文章

  1. HBase - Filter - 过滤器的介绍以及使用 | 那伊抹微笑

    博文作者:那伊抹微笑 csdn 博客地址:http://blog.csdn.net/u012185296 itdog8 地址链接 : http://www.itdog8.com/thread-214- ...

  2. .NET平台开源项目速览(13)机器学习组件Accord.NET框架功能介绍

    Accord.NET Framework是在AForge.NET项目的基础上封装和进一步开发而来.因为AForge.NET更注重与一些底层和广度,而Accord.NET Framework更注重与机器 ...

  3. 微信小程序产品定位及功能介绍

    产品定位及功能介绍 微信小程序是一种全新的连接用户与服务的方式,它可以在微信内被便捷地获取和传播,同时具有出色的使用体验. 小程序注册 注册小程序帐号 在微信公众平台官网首页(mp.weixin.qq ...

  4. 带你走近AngularJS - 基本功能介绍

    带你走近AngularJS系列: 带你走近AngularJS - 基本功能介绍 带你走近AngularJS - 体验指令实例 带你走近AngularJS - 创建自定义指令 ------------- ...

  5. MWeb 1.4 新功能介绍一:引入文件夹到 MWeb 中管理,支持 Octpress、Jekyll 等静态博客拖拽插入图片和实时预览

    之前在 MWeb 中打开非文档库中的 Markdown 文档,如果文档中有引用到本机图片,是没办法在 MWeb 中显示出来和预览的.这是因为 Apple 规定在 Mac App Store(MAS) ...

  6. Joomla软件功能介绍与开源程序大比拼Joomla,wordpress,Drupal哪个好?

    Joomla 软件功能介绍:    Joomla!是一套在国外相当知名的内容管理系统 (Content Management System, CMS),它属于Portal(企业入口网站)类型,顾名思义 ...

  7. CentOS以及Oracle数据库发展历史及各版本新功能介绍, 便于构造环境时有个对应关系

    CentOS版本历史 版本 CentOS版本号有两个部分,一个主要版本和一个次要版本,主要和次要版本号分别对应于RHEL的主要版本与更新包,CentOS采取从RHEL的源代码包来构建.例如CentOS ...

  8. python中列表、元组、字典内部功能介绍

    一.列表(list) 常用功能的介绍:

  9. 网页引导:jQuery插件实现的页面功能介绍引导页效果

    现在很多网站不仅是介绍,更多的是有一些功能,怎么样让客户快速的知道网站有哪些功能呢?这里pagewalkthrough.js插件能帮我们实现,它是一个轻量级的jQuery插件,它可以帮助我们创建一个遮 ...

随机推荐

  1. C#数据库——用多线程来组合一个SQL语句

    StringBuffer sql = new StringBuffer();或(StringBuilder sql = new StringBuilder ()) sql.Append("s ...

  2. 转 释一首美国民谣:沉默之音(The Sound Of Silence)

    Ask not what your country can do for you , ask what you can do for your country.    六十年代对美国而言是个多事之秋的 ...

  3. protel99_拼板详细图解

    首先打开PCB文档.如图所示,在PCB左下角放置一個坐標為X=0,Y=0的焊盤. 从下图看,为了方便电路板生产厂家的加工和焊接工厂的加工,拼版的方向是向上Y轴方向拼版. 接着为了在拼版过程中好对齐板边 ...

  4. 技术不牛如何才拿到国内IT巨头的Offer

    不久前,byvoid面阿里星计划的面试结果截图泄漏,引起无数IT屌丝的羡慕敬仰.看看这些牛人,NOI金牌,开源社区名人,三年级开始写Basic...在跪拜之余我们不禁要想,和这些牛人比,作为绝大部分技 ...

  5. Windows平台下C++插件系统实现的几个关键技术问题及其解决思路

    根据我的实践,在Windows平台下设计并实现一个C++插件系统,需要解决几个关键技术问题.下面我谈谈需要解决的几个关键技术问题以及我想到的简单的解决思路.由于我主要专注于Windows平台C++程序 ...

  6. JAVA 线程学习 - Thread了解

    public class ThreadKnow { private TimeThread timeThread; private boolean flag; public ThreadKnow() { ...

  7. UIPickView之自定义生日键盘和城市键盘

    ////  ViewController.m//  04-键盘处理// // #import "ViewController.h"#import "XMGProvince ...

  8. Node.js入门-Node.js 介绍

    Node.js 是什么 Node.js 不是一种独立的语言,与 PHP,Python 等"既是语言优势平台"不同,它也不是一个 JavaScrip 框架,不同于 CakePHP,D ...

  9. 获取图片中的文本--MODI

    http://www.aspsnippets.com/Articles/Read-Extract-Text-from-Image-OCR-in-ASPNet-using-C-and-VBNet.asp ...

  10. Cocos2d-x win7 + vs2010 配置图文详解(亲测)

    下载最新版的cocos2d-x.打开浏览器,输入cocos2d-x.org,然后选择Download,本教程写作时最新版本为cocos2d-1.01-x-0.9.1,具体下载位置如下图: 下载完之后, ...