作家
登录

HBase原理 – 分布式系统中Snapshot是怎么玩的?

作者: 来源: 2017-09-19 15:04:20 阅读 我要评论

  1. hbase org.apache.hadoop.hbase.snapshot.ExportSnapshot \  
  2. -snapshot MySnapshot -copy-from hdfs://srv2:8082/hbase \  
  3. -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的┞符个流程根本如下:

HBase道理 – 分布式体系中Snapshot是怎么玩的?

分别对应debug日记中如下片段:

  1. snapshot.FlushSnapshotSubprocedure: Flush Snapshotting region yixin:yunxin,user1359,1502949275629.77f4ac61c4db0be9075669726f3b72e6. started... 
  2. snapshot.SnapshotManifest: Storing 'yixin:yunxin,user1359,1502949275629.77f4ac61c4db0be9075669726f3b72e6.' region-info for snapshot. 
  3. snapshot.SnapshotManifest: Creating references for hfiles 
  4. 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个文件,如下图所示:

HBase道理 – 分布式体系中Snapshot是怎么玩的?

个中.snapshotinfo为snapshot根本信息,包含待snapshot的表名称以及snapshot名;data.manifest为snapshot履行后生成的元数据信息,即snapshot结不雅信息。可以应用hadoop dfs -cat /hbase/.hbase-snapshot/snapshotname/data.manifest 查看:


  推荐阅读

  基于web创建逼真的3D图形 | CSS技巧

【沙龙】51CTO诚邀您9月23号和多位技巧大年夜咖一路聊智能CDN的优化之路,抓紧时光哦! 在成为一名web开辟者之前,我大年夜事于视觉设计行业,创造屡获殊荣,片子和电视节目等高端3D效不雅>>>详细阅读


本文标题:HBase原理 – 分布式系统中Snapshot是怎么玩的?

地址:http://www.17bianji.com/lsqh/37524.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)