HBase的数据备份

基于HBase提供的类对表进行备份

使用HBase提供的类把HBase中某张表的数据导出到HDFS,之后再导出到测试hbase表中。

(1)  ==从hbase表导出到HDFS==

[hadoop@node01 shells]$ hbaseorg.apache.hadoop.hbase.mapreduce.Export myuser /hbase_data/myuser_bak

(2) ==文件导入hbase表==

hbase shell中创建备份目标表

create'myuser_bak','f1','f2'

将HDFS上的数据导入到备份目标表中

hbase org.apache.hadoop.hbase.mapreduce.Driver import myuser_bak /hbase_data/myuser_bak/*

补充说明

以上都是对数据进行了全量备份,后期也可以实现表的增量数据备份,增量备份跟全量备份操作差不多,只不过要在后面加上时间戳。

例如:HBase数据导出到HDFS

hbase org.apache.hadoop.hbase.mapreduce.Export test /hbase_data/test_bak_increment 开始时间戳  结束时间戳

4.2 基于snapshot快照对表进行备份

通过snapshot快照的方式实现HBase数据的迁移和拷贝。这种方式比较常用,效率高,也是最为推荐的数据迁移方式。

HBase的snapshot其实就是一组==metadata==信息的集合(文件列表),通过这些metadata信息的集合,就能将表的数据回滚到snapshot那个时刻的数据。

首先我们要了解一下所谓的HBase的LSM类型的系统结构,我们知道在HBase中,数据是先写入到Memstore中,当Memstore中的数据达到一定条件,就会flush到HDFS中,形成HFile,后面就不允许原地修改或者删除了。

如果要更新或者删除的话,只能追加写入新文件。既然数据写入以后就不会在发生原地修改或者删除,这就是snapshot做文章的地方。做snapshot的时候,只需要给快照表对应的所有文件创建好指针(元数据集合),恢复的时候只需要根据这些指针找到对应的文件进行恢复就Ok。这是原理的最简单的描述,下图是描述快照时候的简单流程:

4.3 快照实战

1、创建表的snapshot

snapshot 'tableName', 'snapshotName'

2、查看snapshot

list_snapshots  

查找以test开头的snapshot

list_snapshots 'test.*'

3、恢复snapshot

ps:这里需要对表进行disable操作,先把表置为不可用状态,然后在进行进行restore_snapshot的操作

disable 'tableName'

restore_snapshot 'snapshotName'

enable 'tableName'

4、删除snapshot

delete_snapshot 'snapshotName'

5、迁移 snapshot

  hbase org.apache.hadoop.hbase.snapshot.ExportSnapshot \

  -snapshot snapshotName  \

  -copy-from hdfs://src-hbase-root-dir/hbase \

  -copy-to hdfs://dst-hbase-root-dir/hbase \

  -mappers 1 \

  -bandwidth 1024


  例如:

  hbase org.apache.hadoop.hbase.snapshot.ExportSnapshot \

  -snapshot test  \

  -copy-from hdfs://node01:8020/hbase \

  -copy-to hdfs://node01:8020/hbase1 \

  -mappers 1 \

  -bandwidth 1024

注意:这种方式用于将快照表迁移到另外一个集群的时候使用,使用MR进行数据的拷贝,速度很快,使用的时候记得设置好bandwidth参数,以免由于网络打满导致的线上业务故障。

6、将snapshot使用bulkload的方式导入

hbase org.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles \

  hdfs://dst-hbase-root-dir/hbase/archive/datapath/tablename/filename \

  tablename


  例如:

  创建一个新表

  create 'newTest','f1','f2'

  hbase org.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles hdfs://node1:9000/hbase1/archive/data/default/test/6325fabb429bf45c5dcbbe672225f1fb newTest

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 摘自:http://qindongliang.iteye.com/blog/2366547Hbase的数据备份策略...
    wangliang938阅读 2,022评论 0 0
  • 讲备份,首先就要知道备份的种类,然后再弄清楚每种备份的操作方法。 数据备份分类:hbase数据备份分为离线备份和在...
    _火山_阅读 4,649评论 0 3
  • 常见的HBase数据迁移和备份的方式 我们知道目前HBase可以通过如下几种方式对数据进行数据的迁移和备份: 1、...
    飞鸿无痕阅读 12,291评论 2 19
  • 本周六晚上八点,在dbaplus进行了一场关于HBase跨机房迁移的分享,通过这次分享,给大家系统地介绍了10+p...
    飞鸿无痕阅读 3,271评论 4 8
  • 她说她是一位老人,是时代的落伍者,净说些老话。我听过身边很多自谦的话,可只有杨绛先生说出来,让人真的感觉她是谦逊的...
    扶木生阅读 1,074评论 0 1

友情链接更多精彩内容