一、前言

本文主要介绍Hbase常用的三种简单的容灾备份方案,即CopyTableExport/ImportSnapshot。分别介绍如下:

二、CopyTable

2.1 简介

CopyTable可以将现有表的数据复制到新表中,具有以下特点:

  • 支持时间区间 、row区间 、改变表名称 、改变列族名称 、以及是否Copy已被删除的数据等功能;
  • 执行命令前,需先创建与原表结构相同的新表;
  • CopyTable的操作是基于HBase Client API进行的,即采用scan进行查询, 采用put进行写入。

2.2 命令格式

Usage: CopyTable [general options] [--starttime=X] [--endtime=Y] [--new.name=NEW] [--peer.adr=ADR] <tablename>

2.3 常用命令

  1. 同集群下CopyTable
hbase org.apache.hadoop.hbase.mapreduce.CopyTable --new.name=tableCopy  tableOrig
  1. 不同集群下CopyTable
# 两表名称相同的情况
hbase org.apache.hadoop.hbase.mapreduce.CopyTable \
--peer.adr=dstClusterZK:2181:/hbase tableOrig

# 也可以指新的表名
hbase org.apache.hadoop.hbase.mapreduce.CopyTable \
--peer.adr=dstClusterZK:2181:/hbase \
--new.name=tableCopy tableOrig
  1. 下面是一个官方给的比较完整的例子,指定开始和结束时间,集群地址,以及只复制指定的列族:
hbase org.apache.hadoop.hbase.mapreduce.CopyTable \
--starttime=1265875194289 \
--endtime=1265878794289 \
--peer.adr=server1,server2,server3:2181:/hbase \
--families=myOldCf:myNewCf,cf2,cf3 TestTable

2.4 更多参数

可以通过--help查看更多支持的参数

# hbase org.apache.hadoop.hbase.mapreduce.CopyTable --help

三、Export/Import

3.1 简介

  • Export支持导出数据到HDFS, Import支持从HDFS导入数据。Export还支持指定导出数据的开始时间和结束时间,因此可以用于增量备份。
  • Export导出与CopyTable一样,依赖HBase的scan操作

3.2 命令格式

# Export
hbase org.apache.hadoop.hbase.mapreduce.Export <tablename> <outputdir> [<versions> [<starttime> [<endtime>]]]

# Inport
hbase org.apache.hadoop.hbase.mapreduce.Import <tablename> <inputdir>
  • 导出的outputdir目录可以不用预先创建,程序会自动创建。导出完成后,导出文件的所有权将由执行导出命令的用户所拥有。
  • 默认情况下,仅导出给定Cell的最新版本,而不管历史版本。要导出多个版本,需要将<versions>参数替换为所需的版本数。

3.3 常用命令

  1. 导出命令
hbase org.apache.hadoop.hbase.mapreduce.Export tableName  hdfs路径/tableName.db
  1. 导入命令
hbase org.apache.hadoop.hbase.mapreduce.Import tableName  hdfs路径/tableName.db

四、Snapshot

4.1 简介

HBase的快照(Snapshot)功能允许您获取表的副本(包括内容和元数据),并且性能开销很小。因为快照存储的仅仅是表的元数据和HFiles的信息。快照的clone操作会从该快照创建新表,快照的restore操作会将表的内容还原到快照节点。clonerestore操作不需要复制任何数据,因为底层HFiles(包含HBase表数据的文件)不会被修改,修改的只是表的元数据信息。

4.2 配置

HBase快照功能默认没有开启,如果要开启快照,需要在hbase-site.xml文件中添加如下配置项:

<property>
    <name>hbase.snapshot.enabled</name>
    <value>true</value>
</property>

4.3 常用命令

快照的所有命令都需要在Hbase Shell交互式命令行中执行。

1. Take a Snapshot

# 拍摄快照
hbase> snapshot '表名', '快照名'

默认情况下拍摄快照之前会在内存中执行数据刷新。以保证内存中的数据包含在快照中。但是如果你不希望包含内存中的数据,则可以使用SKIP_FLUSH选项禁止刷新。

# 禁止内存刷新
hbase> snapshot  '表名', '快照名', {SKIP_FLUSH => true}

2. Listing Snapshots

# 获取快照列表
hbase> list_snapshots

3. Deleting Snapshots

# 删除快照
hbase> delete_snapshot '快照名'

4. Clone a table from snapshot

# 从现有的快照创建一张新表
hbase>  clone_snapshot '快照名', '新表名'

5. Restore a snapshot

将表恢复到快照节点,恢复操作需要先禁用表

hbase> disable '表名'
hbase> restore_snapshot '快照名'

这里需要注意的是:是如果HBase配置了基于Replication的主从复制,由于Replication在日志级别工作,而快照在文件系统级别工作,因此在还原之后,会出现副本与主服务器处于不同的状态的情况。这时候可以先停止同步,所有服务器还原到一致的数据点后再重新建立同步。

参考资料

  1. Online Apache HBase Backups with CopyTable
  2. Apache HBase ™ Reference Guide

更多大数据系列文章可以参见个人 GitHub 开源项目: 程序员大数据入门指南

HBase 学习之路(九)——HBase容灾与备份的更多相关文章

  1. HBase 系列(九)——HBase 容灾与备份

    一.前言 本文主要介绍 Hbase 常用的三种简单的容灾备份方案,即CopyTable.Export/Import.Snapshot.分别介绍如下: 二.CopyTable 2.1 简介 CopyTa ...

  2. HBase 学习之路(一)—— HBase简介

    一.Hadoop的局限 HBase是一个构建在Hadoop文件系统之上的面向列的数据库管理系统. 要想明白为什么产生HBase,就需要先了解一下Hadoop存在的限制?Hadoop可以通过HDFS来存 ...

  3. 入门大数据---Hbase容灾与备份

    一.前言 本文主要介绍 Hbase 常用的三种简单的容灾备份方案,即CopyTable.Export/Import.Snapshot.分别介绍如下: 二.CopyTable 2.1 简介 CopyTa ...

  4. HBase学习之路 (二)HBase集群安装

    前提 1.HBase 依赖于 HDFS 做底层的数据存储 2.HBase 依赖于 MapReduce 做数据计算 3.HBase 依赖于 ZooKeeper 做服务协调 4.HBase源码是java编 ...

  5. HBase学习之路 (十一)HBase的协过滤器

    协处理器—Coprocessor 1. 起源 Hbase 作为列族数据库最经常被人诟病的特性包括:无法轻易建立“二级索引”,难以执 行求和.计数.排序等操作.比如,在旧版本的(<0.92)Hba ...

  6. HBase学习之路 (三)HBase集群Shell操作

    进入HBase命令行 在你安装的随意台服务器节点上,执行命令:hbase shell,会进入到你的 hbase shell 客 户端 [hadoop@hadoop1 ~]$ hbase shell S ...

  7. HBase学习之路 (一)HBase基础介绍

    产生背景 自 1970 年以来,关系数据库用于数据存储和维护有关问题的解决方案.大数据的出现后, 好多公司实现处理大数据并从中受益,并开始选择像 Hadoop 的解决方案.Hadoop 使用分 布式文 ...

  8. HBase 学习之路(八)——HBase协处理器

    一.简述 在使用HBase时,如果你的数据量达到了数十亿行或数百万列,此时能否在查询中返回大量数据将受制于网络的带宽,即便网络状况允许,但是客户端的计算处理也未必能够满足要求.在这种情况下,协处理器( ...

  9. HBase 学习之路(六)——HBase Java API 的基本使用

    一.简述 截至到目前(2019.04),HBase 有两个主要的版本,分别是1.x 和 2.x ,两个版本的Java API有所不同,1.x 中某些方法在2.x中被标识为@deprecated过时.所 ...

随机推荐

  1. Xcode 4.5( iOS6 SDK)、旧版本号cocos2d,支持iPhone5解析度

    支持iPhone5全屏 1假设没有支持iPhone5是否.直接运行程序可以准备提交.开放iPhone5模拟器,你会发现上面有黑色的程序.没有矩形. 2真正运行该程序时,.你会发现程序回程屏幕高度.它是 ...

  2. 4 DDD里面的界限上下文

    1 界限上下文概念的出现 当开发一个电子商务系统的时候,会给系统划分很多子域,销售子域是核心子域,此外还有物流子域,商品子域等支撑子域.在这些子域里面,一个商品product在销售子域和商品子域里面外 ...

  3. 简明Python3教程 13.面向对象编程

    简介 (注: OOP代表面向对象编程,OO代表面向对象,以后全部使用英文缩写) 迄今为止我们编写的所有程序都是围绕函数创建的,函数即操纵数据的语句块.这称作面向过程编程. 除此之外还有另一种组织程序的 ...

  4. ValueStack和OGNL达到Struts2形式的数据存储原理

    (1)最近学习struts相框,我们在快乐struts强大.为了便于使用转发,但不了解详细的内部数据存储: (2)网上找了很多关于struts数据存储的原理,但我还没有找到一个具体的解释,本书上找到了 ...

  5. 构建自己的PHP框架(ORM)

    完整项目地址:https://github.com/Evai/Aier 我们选择 Laravel 的 illuminate/database 作为我们的 ORM 包. 在本系列教程里,每一个 Comp ...

  6. 联想K860 ROM 从官方Vibe 精简 提高性能

    ROM介绍 从官方:根据官方Vibe 1403 6从编译版本 除去不想要的软件的一部分 自己Root权限最新版本Superuser 园林绿化导航虚拟按键 优化系统.更顺畅 提升游戏性能 优化自己主动调 ...

  7. 图形化界面安装oracle报错Could not execute auto check for display colors using command /usr/bin/xdpyinfo. Check if the DISPLAY variable is set.

    问题描述: 在Linux + oracle 安装时,采有root 帐号登录x-windows 界面,然后 $su oracle 登录录安装Oracle 报以下错误: >>> Coul ...

  8. ajax默认form表单提交,导致实体不识别

    出现位置:实体比较复杂,包含List之类的时候 public class AdvertisementType { /// <summary> /// 广告位名称 /// </summ ...

  9. style文件的指定

    新建资源文件   写资源文件 <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/prese ...

  10. Lexer的设计--中(4)

    设计一个小型的内存池以及链表 上一节撸到万事俱备只欠真正的lex, 但是lex的作用是将源代码转化为Token流, 用什么保存Token? 这就涉及到我们要接触的第一个数据结构-链表, 虽然标准库中很 ...