ITPub博客

首页 > 大数据 > > 深入浅出HBase(三)

深入浅出HBase(三)

作者:浪花小雨滴 时间:2020-05-09 10:56:11 0 删除 编辑

今天继续HBase的写入过程,写入过程记录不是太完整,先占位吧,以后慢慢填充修改,:)

1、HBase写过程详解

3.1写入HLog(WAL log)

前面已经讲了,HLog主要是用于HBase灾难恢复用,数据以顺序写的方式追加到文件后边,因此写入效率堪比内存写入;其内容可以看成是Memstore内容的镜像;HBase写入的时候是先写入HLog,再写入Memstore的,顺序不能颠倒,两者都写入成功才算一次提交成功。

要注意,每个Region Server维护一个HLog,而不是每个Region一个HLog。因此不同region(来自不同table)的日志会混在一起,这样做的目的是不断追加单个文件相对于同时写多个文件而言,可以减少磁盘寻址次数,也就可以提高对table的写性能。带来的问题是,如果一台region server下线,为了恢复其上的region,需要将region server上的log进行拆分,然后分发到其它region server上进行恢复。

3.2 写入HFile

整个HFile写入流程从客户端调用API开始,数据会通过protobuf编码成一个请求,通过scoket实现的IPC模块被送达server的RPC队列中。最后由负责处理RPC的handler取出请求完成写入操作。写入会先写HLog文件,然后再写一份到内存中,也就是memstore模块,当满足条件时,memstore才会被flush到底层文件系统,形成HFile。

在MemStore Flush过程中,会在尾部追加一些meta数据,其中包括Flush时最大的HLog sequence值,以告诉HBase这个StoreFile写入的最新数据的序列号。这样在出现灾难,需要的Recover时就知道改从哪里开始恢复。在HRegion启动时,这个sequence会被读取,并取最大的作为下一次更新时的起始sequence。


3.2.1 Memstore flush图示

3.3 MVCC多版本控制协议

HBase中采用的是多版本控制协议的方式来做操作的回滚、操作的原子性、操作在未完成时候的不可见等问题。在HBase中通过MultiVersionConsistencyControl类来管理多版本的控制协议,可以同时支持多个写操作,若是其中的一个写操作失败可以rollback到相应的写操作。具体的操作是每一个或一批操作获得一个唯一的一个mvcc版本号,先将这部分操作的数据依次写入到WAL中、memstore内存中、进行其他操作,若是其中的一步失败,可以根据mvcc version id删除已经写到memstore中的操作(实际上,memstore可以理解为一个简单的SortSet<KeyValue>,失败的话直接删除相应的KeyValue)。在整个系统中MultiVersionConsistencyControl维护着一个readpoint,在读的时候如需要控制原子性(未写完的数据不可见),则只需读取mvcc version <=readpoint的记录即可;关于readpoint的更新,当一个write操作完成的时候,会更新readpoint,可以同时支持多个write的操作,但只有一个readpoint,所以MultiVersionConsistencyControl中存储了一个write操作的queue, write操作在开始的时候会在queue注册自己,当有一个write完成的时候,会将这个write的mvcc操作置成完成OK状态,随之遍历mvcc write操作queqe,更新readpoint并移除readpoint前面的老的mvcc 版本。一个region中存在唯一的MultiVersionConsistencyControl,所以目前的操作原子性支持到region级别的。

3.4删除数据

HBase中 delete 数据并不是把原有的数据立即删除,而仅仅是做一个标记操作,真实的数据会在后面的 Major Compaction 过程中删除。

3.5 Compaction的过程

Compaction是指对HFile或这Memstore中的segment进行合并的操作。


图3.5.1 Memstore的Flush与Compaction的过程
图3.5.2 Major Compaction的过程

一般在集群中关闭自动Major Compaction,以降低Compaction对IO资源的抢占,出于清理数据的需要,在一些非繁忙时段手动触发Major Compaction,这样既可以有效降低存储空间,也可以有效降低读取时延。

如果觉得有用,记得点赞关注哦,:)

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/31537575/viewspace-3147916/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: MongoDB 自动增长
请登录后发表评论 登录
全部评论

注册时间:2018-05-16

  • 博文量
    4259
  • 访问量
    39941