• Hbase之SnapShot快照操作


    snapshot基本原理

    snapshot机制并不会拷贝数据,可以理解为它是原数据的一份指针。在HBase这种LSM类型系统结构下是比较容易理解的,我们知道HBase数据文件一旦落到磁盘之后就不再允许更新删除等原地修改操作,如果想更新删除的话可以追加写入新文件(HBase中根本没有更新接口,删除命令也是追加写入)。这种机制下实现某个表的snapshot只需要给当前表的所有文件分别新建一个引用(指针),其他新写入的数据重新创建一个新文件写入即可。如下图所示:
    在这里插入图片描述

    snapshot流程主要涉及3个步骤:

    1. 加一把全局锁,此时不允许任何的数据写入更新以及删除
    2. 将Memstore中的缓存数据flush到文件中(可选)
    3. 为所有HFile文件分别新建引用指针,这些指针元数据就是snapshot

    snapshot使用场景

    (1)增量备份,通常情况下,对重要的业务数据,建议至少每天执行一次snapshot来保存数据的快照记录,并且定期清理过期快照,这样如果业务发生重要错误需要回滚的话是可以回滚到之前的一个快照点的。 
    (2)从用户或者应用异常中还原;从一个已知的安全状态恢复/还原
    (4)查看之前的快照并有选择性的合并不同写入产品环境
    (5)如果要对集群做重大的升级的话,建议升级前对重要的表执行一次snapshot,一旦升级有任何异常可以快速回滚到升级前。
    (6)数据迁移,生成快照,导入到其他集群进行操作。因为导出的快是HDFS级别,所以不会像复制表那样降低HBase主集群的效率。机房在线迁移,通常情况是数据在A机房,因为A机房机位不够或者机架不够需要将整个集群迁移到另一个容量更大的B集群,而且在迁移过程中不能停服。基本迁移思路是先使用snapshot在B集群恢复出一个全量数据,再使用replication技术增量复制A集群的更新数据,等待两个集群数据一致之后将客户端请求重定向到B机房。
    (7)应用测试,构建测试环境:通过快照模拟生产环境下结构或应用发生的变化,测试完成即可丢弃
    (8)使用snapshot将表数据导出到HDFS,再使用Hive\Spark等进行离线OLAP分析,比如审计报表、月度报表等
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    snapshot用法命令

    1. 为表创建快照
    为表’sourceTable’打一个快照’snapshotName’,快照并不涉及数据移动,可以在线完成。
    
    hbase> snapshot 'sourceTable', ‘snapshotName'
    
    • 1
    • 2
    • 3
    1. 恢复快照
    恢复指定快照,恢复过程会替代原有数据,将表还原到快照点,快照点之后的所有更新将会丢失。
    需要注意的是原表需要先disable掉,才能执行restore_snapshot操作。
    
    1.hbase> disable ‘snapshotName'
    2.hbase> restore_snapshot ‘snapshotName'
    
    • 1
    • 2
    • 3
    • 4
    • 5
    1. 根据快照建立新表
    根据快照恢复出一个新表,恢复过程不涉及数据移动,可以在秒级完成
    
    clone_snapshot 'snapshotName', ‘tableName'
    
    • 1
    • 2
    • 3
    1. 使用ExportSnapshot集群间迁移快照
    hbase org.apache.hadoop.hbase.snapshot.ExportSnapshot \
       -snapshot MySnapshot -copy-from hdfs://srv2:8082/hbase \
       -copy-to hdfs://srv1:50070/hbase \
       -mappers 16 \
       -bandwidth  1024\
    
    • 1
    • 2
    • 3
    • 4
    • 5

    使用ExportSnapshot命令可以将A集群的快照数据迁移到B集群,ExportSnapshot是HDFS层面的操作,会使用MR进行数据的并行迁移,因此需要在开启MR的机器上进行迁移。HMaster和HRegionServer并不参与这个过程,因此不会带来额外的内存开销以及GC开销。唯一的影响是DN在拷贝数据的时候需要额外的带宽以及IO负载,ExportSnapshot也针对这个问题设置了参数-bandwidth来限制带宽的使用

    1. 查看快照–shell
    list_snapshots
    
    • 1
    1. 查看快照信息–hdfs
    • 1.查看hbase-site.xml
    //hbase在hdfs上的目录
    	<property>
            <name>hbase.rootdir</name>
            <value>hdfs://Test-hr-bigdata/hbase</value>
        </property>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 2.快照目录
    hadoop fs -ls /hbase/.hbase-snapshot
    
    • 1
    1. hmaster如何汇总所有region snapshot的结果?
      hmaster会在所有region完成snapshot之后执行一个汇总操作(consolidate),将所有region snapshot manifest汇总成一个单独manifest,汇总后的snapshot文件是可以在HDFS目录下看到的,
      路径为:/hbase/.hbase-snapshot/snapshot_name/data.manifest。注意,snapshot目录下有3个文件,如下图所示:在这里插入图片描述
      其中
    • .snapshotinfo为snapshot基本信息,包含待snapshot的表名称以及snapshot名;
    • data.manifest为snapshot执行后生成的元数据信息,即snapshot结果信息。
    • 可以使用hadoop dfs -cat /hbase/.hbase-snapshot/snapshotname/data.manifest 查看:
      在这里插入图片描述

    参考

    HBase原理 – snapshot 快照

    HBase骚操作之你不得不知的快照表

  • 相关阅读:
    Python接口测试封装request的发送,json的处理,提取,修改
    git 的行结束符
    工单系统选购指南:解锁高效管理之门的秘密
    计算机毕业设计Java高等数学试卷系统(源码+系统+mysql数据库+lw文档)
    漆包线行业你了解多少?
    Linux——web建立wordpress
    【BMS软开系列】1、 ISO 26262功能安全标准 (二)
    sh脚本工具集锦(文件批量操作、音视频相关)持续更新
    ASP.NET Core 在 IIS 下的两种部署模式
    yum命令中的gcc是什么含义?答:是一种包,并不是参数。
  • 原文地址:https://blog.csdn.net/Lzx116/article/details/126454082