作家
登录

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

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

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

clone_snapshot若何实现呢?

前文提到snapshot可以用来搞很多大年夜工作,比如restore_snapshot、clone_snapshot以及export snapshot等等,这节就来看看clone_snapshot这个功能具体是若何实现的。直接进入正题,全部步调可以概括为如下:

  • 预检查:确认目标表没有进行snapshot操作以及restore操作,不然直接返回缺点
  • 在tmp文件夹下新建表目次并在表目次下新建.tabledesc文件,在该文件中写入表schema信息
  • 新建region目次:这个步调是clone_snapshot和create table最大年夜的不合,新建的region目次是根据snapshot manifest中信息肯定的,region中有哪些列族?列族中有哪些HFile文件?都来源竽暌冠此。

上节大年夜架构层面介绍了snapshot如安在分布式体系中完成原子性操作。那每个region是若何真正实现snapshot呢?hmaster又是若何汇总所有region snapshot结不雅?

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

上图中LinkFile文件名为music=5e54d8620eae123761e5290e618d556b-f928e045bb1e41ecbef6fc28ec2d5712,根据定义我们知道music为原始文件的表名,5e54d8620eae123761e5290e618d556b为引用文件地点的region,f928e045bb1e41ecbef6fc28ec2d5712为引用文件,如下图所示:

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

我们可以根据规矩可以直接根据LinkFile的文件名定位到引用文件地点地位:***/music/5e54d8620eae123761e5290e618d556b/cf/f928e045bb1e41ecbef6fc28ec2d5712,如下图所示:

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

4. 将表目次大年夜tmp文件夹下移动到hbase root location

5. 修改meta表,将克隆表的region信息添加到meta表中,留意克隆表的region名称和原数据表的region名称并不雷同(region名称与table名称相干,table名不合,region名称就肯定不晦鸬铂)

6. 将这些region经由过程round-robin方法急速平均分派到全部集群中,并在zk大将克隆表的状况设置为enabled,正式对外供给办事

其他须要留意的

不知道大年夜家有没有存眷另一个问题,按照上文的说法我们知道snapshot实际上是一系列原始表的元数据,重要包含表schema信息、原始表所有region的region info信息,region包含的列族信息以及region下所有的hfile文件名以及文件大年夜小等。那如不雅原始表产生了compaction导致hfile文件名产生了变更或者region产生了决裂,甚至删除了原始表,之前所做的snapshot是否就掉效了?

大年夜功能实现的角度来讲肯定不会让用户任何时光点所作的snapshot掉效,那若何避免上述所列的各类情况下snapshot掉效呢?HBase的实现也比较简单,在原始表产生compact的操作前会将原始表复制到archive目次下再履行compact(对于表删除操作,正常情况也会将删除表数据移动到archive目次下),如许snapshot对应的元数据就不会掉去意义,只不过原始数据不再存在于数据目次下,而是移动到了archive目次下。

大年夜家可以做一下如许一个实验看看:

  • 应用snapshot给一张表做快照,比如snapshot ’test’,’test_snapshot’
  • 查看archive目次,确认不存在目次:/hbase-root-dir/archive/data/default/test
  • 对表test履行major_compact操作:major_compact ’test’
  • 再次查看archive目次,就会发明test原始表移动到了该目次,/hbase-root-dir/archive/data/default/test就会存在

同理,如不雅对原始表履行delete操作,比如delete ’test’,也会在archive目次下找到该目次。和通俗表删除的情况不合的是,通俗表一旦删除,刚开端是可以在archive中看到删除表的数据文件,然则等待一段时光后archive中的数据就会被彻底删除,再也无法找回。这是因为master上会启动一个按期清理archive中垃圾文件的线程(HFileCleaner),按期会对这些被删除的垃圾文件进行清理。然则snapshot原始表被删除之落后入archive,并弗成以被按期清理掉落,上文说过clone出来的新表并没有clone真正的文件,而是生成的指向原始文件的连接,这类文件称之为LinkFile,很显然,只要LinkFile还指向这些原始文件,它们就弗成以被删除。好了,这里有两个问题:

如不雅看过笔者上篇文┞仿《HBase道理 – 所有Region切分的细节都在这里了》的同窗,肯定看着这个问题有种似曾了解的赶脚。不错,HBase一一个region决裂成两个子region后,子region的文件也是引用文件,这些引用文件是在履行compact的时刻才真正将父region中的文件迁徙到本身的文件目次下。LinkFile也一样,在clone出的新表履行compact的时刻才将归并后的文件写到新目次并将相干的LinkFile删除,理论上也是借着compact趁便做了这件事。

2. commit阶段:一旦所有regionserver都完成了snapshot的prepared工作,即都在/acquired-snapshotname节点下新建了对应子节点,hmaster就认为snapshot的预备工作完全完成。master会新建一个新的节点/reached-snapshotname,表示发送一个commit敕令给介入的regionserver。所有regionserver监测到/reached-snapshotname节点之后,履行snapshot commit操作,commit操作异常简单,只须要将prepare阶段生成的结不雅大年夜临时文件夹移动到最终文件夹即可。履行完成之后在/reached-snapshotname节点下新建子节点/reached-snapshotname/nodex,表示节点nodex完成snapshot工作。


  推荐阅读

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

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


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

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

关键词: 探索发现

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

网友点评
自媒体专栏

评论

热度

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