加入收藏 | 设为首页 | 会员中心 | 我要投稿 核心网 (https://www.hxwgxz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 教程 > 正文

图解HBase--大数据平台技术栈

发布时间:2019-07-31 18:26:17 所属栏目:教程 来源:架构师公社
导读:HBase简介 HBase是一个分布式的、面向列的开源数据库存储系统,是对Google论文BigTable的实现,具有高可靠性、高性能和可伸缩性,它可以处理分布在数千台通用服务器上的PB级的海量数据。BigTable的底层是通过GFS(Google文件系统)来存储数据,而HBase对应的

如果HBase开启了replication,当replication执行完一个HLog的时候,会删除Zookeeper上的对应HLog节点,在HLog被移动到/hbase/oldWALs目录后,HBase每隔hbase.master.cleaner.interval(默认60秒)时间会去检查/hbase/oldWALs目录下的所有HLog,确认对应的Zookeeper的HLog节点是否被删除,如果Zookeeper上不存在对应的HLog节点,那么久直接删除对应的HLog。

hbase.master.logcleaner.ttl(默认10分钟)这个参数用来控制HLog在/hbase/oldWALs目录保留的最长时间。

MemStore刷盘

为了提高HBase的写入性能,当写请求写入MemStore后,不会立即刷盘,而是会等到一定的时候再进行刷盘操作。

发生MemStore刷盘场景:

1. 全局内存控制

当整个RegionServer中所有MemStore占用的内存达到阈值的时候,会触发刷盘的操作。

2. MemStore达到上限

当MemStore占用内存的大小达到hbase.hregion.memstore.flush.size的值的时候会触发刷盘,默认128M。

3. RegionServer的HLog数量达到上限

如果HLog太多的话,会导致故障恢复的时间过长,因此HBase会对HLog的最大个数做限制。当达到HLog的最大个数的时候,会强制刷盘(hbase.regionserver.max.logs,默认32个)。

4. MemStore达到刷写时间间隔

当MemStore达到时间间隔的阈值,会触发刷写操作,hbase.regionserver.optionalcacheflushinterval,默认3600000,即1小时,如果设置为0,则意味着关闭定时自动刷写。

5. 手工触发

可以通过hbase shell或者java api手工触发flush的操作

6. 关闭RegionServer触发

当正常关闭RegionServer会触发刷盘的操作,全部数据刷盘后就不需要再使用HLog恢复数据

7. Region使用HLog恢复完数据后触发

当RegionServer出现故障的时候,其上面的Region会迁移到其他正常的RegionServer上,在恢复完Region的数据后,会触发刷盘,当刷盘完成后才会提供给业务访问。

Region拆分

随着业务的发展,在表中的数据会越来越多,Region会越来越大,这样会严重影响数据读取效率。所以当一个Region变的过大后,会触发Split操作,将一个Region分裂成两个子Region。Region的拆分分为自动拆分和手动拆分两种。

图解Hbase--大数据平台技术栈

Region拆分流程

  1. RegionServer自身决定region拆分,并准备发起拆分。作为第一步,它将在zookeeper的分区/hbase/region-in-transition/region-name下中创建一个znode。
  2. 因为Master是父region-in-transition的znode节点的观察者,所以它知晓这个znode的建立。
  3. RegionServer在HDFS的父region目录下创建一个名为“.splits”的子目录。
  4. RegionServer关闭父region,强制cache刷盘并在本地数据结构中将这个region标记为offline。此时,父region的client请求将抛出NotServingRegionException,client将重试。
  5. RegionServer为子region A和B分别在.splits目录下的region目录,并创建必要的数据结构。然后拆分存储文件,即先在父region中创建每个存储文件两个reference文件。这两个reference文件将指向父region文件。
  6. RegionServer在HDFS中创建实际的region目录,并为每个子region更新相应的reference文件。
  7. RegionServer发起Put请求到.META.表,并在.META.表中将父region设置为offline,表并添加有关子region的信息。此时,.META.表中不会有每个子region的单独的条目。client可以通过scan .META.表来知晓父region正在拆分,但是除非子region信息记录到.META.表,否则client是看不到子region的。如果前面的Put操作成功写入到.META.表,则标志父region拆分完成。如果RegionServer在put操作前返回失败,则Master和打开这个region的RegionServer将会清除region拆分的错误状态,如果.META.表成功更新,则region拆分状态会被Master向前翻。
  8. RegionServer打开子region并行地接受写入请求。
  9. RegionServer将子region A和B,以及它们的承载者信息分别添加到.META.表。之后,client就可以发现新的region,并访问之。client本地缓存.META.表信息,但是当它们访问RegionServer或者.META.表时,本地缓存失效,client从.META.表获取新的region信息。
  10. RegionServer更新zookeeper的/hbase/region-in-transition/region-name节点中的region状态到SPLIT,以便master感知其状态变化。如果需要的话,负载器可以将子region自由地指定到其它region。
  11. region拆分完成后,其元数据和HDFS仍将包含对父region的引用。这些引用将在子region压缩重写数据文件时被删除。Master的GC任务会定期检查子region是否仍然引用父文件,如果没有,父region将被删除。

为了减少对业务的影响,Region Split过程并不会真正将父Region中的HFile数据搬到子Region目录中。Split过程仅仅是在子Region中创建了到父Region的HFile的引用文件,子Region1中的引用文件指向原HFile的上部,而子Region2的引用文件指向原HFile2的下部。数据的真正搬迁工作是在Compaction过程中完成的。

Region合并

Region的合并分为小合并(Minor Compaction)和大合并(Major Compaction)。

图解Hbase--大数据平台技术栈

小合并(Minor Compaction)

(编辑:核心网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读