- 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\
hbase snapshot分布式架构-两阶段提交
hbase为指定表履行snapshot操作,实际上真正履行snapshot的是对应表的所有region。这些region因为分布在多个RegionServer上,所以须要一种机制来包管所有介入履行snapshot的region要么全部完成,要么都没有开端做,不克不及出现中心状况,比如某些region完成了,某些region未完成。
HBase应用两阶段提交协定(2PC)来包管snapshot的分布式原子性。2PC一般由一个调和者和多个介入者构成,全部事务提交分为两个阶段:prepare阶段和commit阶段。个中prepare阶段调和者会向所有介入者发送prepare敕令,所有介入者开端获取响应资本(比如锁资本)并履行prepare操作确承认以履行成功,平日核心工作都是在prepare操作中完成的。并返回给调和者prepared应答。调和者接收到所有介入者返回的prepared应答之后(注解所有介入者都已经预备好提交),在本地持久化commit状况,进入commit阶段,调和者会向所有介入者发送commit敕令,介入者接收到commit敕令之后会履行commit操作并释放资本,平日commit操作都异常简单。
接下来就看看hbase是若何应用2PC协定来构建snapshot架构的,根本步调如下:
1. prepare阶段:HMaster在zookeeper创建一个’/acquired-snapshotname’节点,并在此节点上写入snapshot相干信息(snapshot表信息)。所有regionserver监测到这个节点之后,根据/acquired-snapshotname节点携带的snapshot表信息查看当前regionserver上是否存在目标表,如不雅不存在,就忽视该敕令。如不雅存在,遍历目标表中的所有region,分别针对每个region履行snapshot操作,留意此处snapshot操作的结不雅并没有写入最终文件夹,而噬烫蛛临时文件夹。regionserver履行完成之后会在/acquired-snapshotname节点下新建一个子节点/acquired-snapshotname/nodex,表示nodex节点完成了该regionserver上所有相干region的snapshot预备工作。
3. abort阶段:如不雅在一准时光内/acquired-snapshotname节点个数没有知足前提(还有regionserver的预备工作没有完成),hmaster认为snapshot的预备工作超时。hmaster会新建另一种新的节点/abort-snapshotname,所有regionserver监听到这个敕令之后会清理snapshot在临时文件夹中生成的结不雅。
可以看到,在这个体系中HMaster充当了调和者的角色,RegionServer充当了介入者的角色。HMaster和RegionServer之间的通信经由过程Zookeeper来完成,同时,事务状况也是记录在Zookeeper上的节点上。HMaster高可用情况下主HMaster宕机了,大年夜HMaster切成主后根据Zookeeper上的状况可以决定事务十分持续提交或者abort。
region若何实现snapshot?
在基来源基本理一节我们提到过snapshot不会真正拷贝数据,而是应用指针引用的方法创建一系列元数据。那元数据具体是什么样的元数据呢?实际上snapshot的┞符个流程根本如下:

分别对应debug日记中如下片段:
- snapshot.FlushSnapshotSubprocedure: Flush Snapshotting region yixin:yunxin,user1359,1502949275629.77f4ac61c4db0be9075669726f3b72e6. started...
- snapshot.SnapshotManifest: Storing 'yixin:yunxin,user1359,1502949275629.77f4ac61c4db0be9075669726f3b72e6.' region-info for snapshot.
- snapshot.SnapshotManifest: Creating references for hfiles
- snapshot.SnapshotManifest: Adding snapshot references for [] hfiles
留意:region生成的snapshot文件是临时文件,生成目次在/hbase/.hbase-snapshot/.tmp下,一般因为snapshot过程特别快,所以很难看到单个region生成的snapshot文件。
hmaster若何汇总所有region snapshot的结不雅?
hmaster会在所有region完成snapshot之后履行一个汇总操作(consolidate),将所有region snapshot manifest汇总成一个零丁manifest,汇总后的snapshot文件是可以在HDFS目次下看到的,路径为:/hbase/.hbase-snapshot/snapshotname/data.manifest。留意,snapshot目次下有3个文件,如下图所示:

个中.snapshotinfo为snapshot根本信息,包含待snapshot的表名称以及snapshot名;data.manifest为snapshot履行后生成的元数据信息,即snapshot结不雅信息。可以应用hadoop dfs -cat /hbase/.hbase-snapshot/snapshotname/data.manifest 查看:
推荐阅读
【沙龙】51CTO诚邀您9月23号和多位技巧大年夜咖一路聊智能CDN的优化之路,抓紧时光哦! 在成为一名web开辟者之前,我大年夜事于视觉设计行业,创造屡获殊荣,片子和电视节目等高端3D效不雅>>>详细阅读
本文标题:HBase原理 – 分布式系统中Snapshot是怎么玩的?
地址:http://www.17bianji.com/lsqh/37524.html
1/2 1

网友点评
精彩导读
科技快报
品牌展示