作家
登录

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

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

【沙龙】51CTO诚邀您9月23号和多位技巧大年夜咖一路聊智能CDN的优化之路,抓紧时光哦!


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

snapshot(快照)基本道理

snapshot是很多存储体系和数据库体系都支撑的功能。一个snapshot是一个全部文件体系、或者某个目次在某一时刻的镜像。实现数据文件镜像最简单粗暴的方法是加锁拷贝(之所以须要加锁,是因为镜像获得的数据必须是某一时刻完全一致的数据),拷贝的┞封段时光不许可对原数据进行任何情势的更新删除,仅供给只读操作,拷贝完成之后再释放锁。这种方法涉及数据的实际拷贝,数据量大年夜的情况下必定会花费大年夜量时光,长时光的加锁拷贝必定导致客户端长时光不克不及更新删除,这是临盆线上不克不及容忍的。

snapshot机制并不会拷贝数据,可以懂得为它是原数据的一份指针。在HBase这种LSM类型体系构造下是比较轻易懂得的,我们知道HBase数据文件一旦落稻磁逄之后就不再许可更新删除等原地修改操作,如不雅想更新删除的话可以追加写入新文件(HBase中根本没有更新房口,删除敕令也是追加写入)。这种机制下实现某个表的snapshot只须要给当前表的所有文件分别新建一个引用(指针),其他新写入的数据从新创建一个新文件写入即可。如下图所示:

snapshot流程重要涉及3个步调:

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

扩大思虑:LSM类体系确切比较轻易懂得,那其他非LSM体系原地更新的存储体系若何实现snapshot呢?

1. 什么时刻LinkFile会变成真实的数据文件?

snapshot能实现什么功能?

snapshot是HBase异常核心的一个功能,应用snapshot的不合用法可以实现很多功能,比如:

应用处景一:平日情况下,对重要的营业数据,建议至少天天履行一次snapshot来保存数据的快照记录,并且按期清理过时快照,如许如不雅营业产生重要缺点须要回滚的话是可以回滚到之前的一个快照点的。

应用处景二:如不雅要对集群做重大年夜的进级的话,建议进级前对重要的表履行一次snapshot,一旦进级有任何异常可以快速回滚到进级前。

2. 数据迁徙:可以应用ExportSnapshot功能将快照导出到另一个集群,实现数据的迁徙

应用处景一:机房在线迁徙,平日情况是数据在A机房,因为A机房机位不敷或者机架不敷须要将全部集群迁徙到另一个容量更大年夜的B集群,并且在迁徙过程中不克不及停服。根本迁徙思路是先应用snapshot在B集群恢复出一个全量数据,再应用replication技巧增量复制A集群的更新数据,等待两个集群数据一致之后将客户端请求重定向到B机房。具体步调可以参考: https://www.cloudera.com/documentation/enterprise/5-5-x/topics/cdh_bdr_hbase_replication.html#topic_20_11_7

应用处景二:应用snapshot将表数据导出到HDFS,再应用Hive\Spark等进行离线OLAP分析,比瘸荔计报表、月度报表等

全量/增量备份:任何数据库都须要有备份的功能来实现数据的高靠得住性,snapshot可以异常便利的实现表的在线备份功能,并且对在线营业请求影响异常小。应用备份数据,用户可以在异常产生的情况下快速回滚到指定快照点。增量备份会在全量备份的基本上应用binlog进行周期性的增量备份。

hbase snapshot用法大年夜全

snapshot最常用的敕令有snapshot、restore_snapshot、clone_snapshot以及ExportSnapshot这个对象,具体应用办法如下:

为表’sourceTable’打一个快照’snapshotName’,快照并不涉及数据移动,可以在线完成。

  1. hbase> snapshot 'sourceTable', ‘snapshotName' 

恢复指定快照,恢复过程会替代原稀有据,将表还原到快照点,快照点之后的所有更新将会损掉。须要留意的是原表须要先disable掉落,才能履行restore_snapshot操作。

  1. hbase> restore_snapshot ‘snapshotName' 

根据快照恢复出一个新表,恢复过程不涉及数据移动,可以在秒级完成。很好奇是怎么做的吧,且听下文分化。

  1. hbase> clone_snapshot 'snapshotName', ‘tableName' 

此处有一个很有意思的工作是clone_snapshot克隆表的过程中并不涉及数据的移动,那不禁要问克隆出的表中文件是什愦文件?与原表中数据文件之间的对应关系若何建立?这个问题的解决和split过程中reference文件的解决思路根本一致,不过在clone_snapshot中并不称作reference文件,而叫做linkfile,和reference文件不一样的是linkfile文件没有任何内容,只是在文件名上做了文┞仿,比如原文件名是abc,生成的linkfile就为:table=region-abc,经由过程这种方法就可以很轻易定位到原表华夏始文件的具体路径:xxx/table/region/hfile,是以就可以不须要移动数据了。

应用ExportSnapshot敕令可以将A集群的快照数据迁徙到B集群,ExportSnapshot是HDFS层面的操作,会应用MR进行数据的并行迁徙,是以须要在开启MR的机械长进行迁徙。HMaster和HRegionServer并不介入这个过程,是以不会带来额外的内存开销以及GC开销。独一的影响是DN在拷贝数据的时刻须要额外的带宽以及IO负载,ExportSnapshot也针对这个问题设置了参数-bandwidth来限制带宽的应用。

 1/4    1 2 3 4 下一页 尾页

  推荐阅读

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

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


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

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

关键词: 探索发现

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

网友点评
自媒体专栏

评论

热度

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