HBase之写流程与读流程

基本概念

  1. HFile文件
    保存在磁盘的hbase表数据文件, 格式为HFile。数据块为存储单元, 默认认大小64KB。
  2. MemStore
    写缓存,由于HFile中的数据要求是有序的,数据是先在MemStore中,排好序后,再刷写到HFile. 每次刷写都会形成一个新的HFile。
  3. WAL
    数据会先写WAL(Write-Ahead logfile)日志文件文件中,然后再写入MemStore中。以便在MemStore(内存)中的数据丢失后可以恢复.
    每间隔hbase.regionserver.optionallogflushinterval(默认1s), HBase会把操作从内存写入WAL. 一个RegionServer上的所有Region共享一个WAL实例。

    WAL的检查间隔由hbase.regionserver.logroll.period定义,默认值为1小时。检查的内容是把当前WAL中的操作跟实际持久化到HDFS上的操作比较,看哪些操作已经被持久化了,被持久化的操作就会被移动到.oldlogs文件夹内(这个文件夹也是在HDFS上的)。
    一个WAL实例包含有多个WAL文件。WAL文件的最大数量通过hbase.regionserver.maxlogs(默认是32)参数来定义。

  4. BlockCache
    读缓存,每次查询出的数据会缓存在BlockCache中,方便下次查询.

1587008561750

写流程

写流程

  1. Client先访问zookeeper,获取hbase:meta表所在的Region Server, 查询hbase:meta表获取目标Redgion Server. 在将该表的region信息以及meta表的位置信息缓存在客户端的meta cache之后与目标Region Sever进行通讯;
  2. 将数据顺序写入(追加)到WAL;
  3. 将数据写入对应的MemStore,数据会在MemStore进行排序;
  4. 向客户端发送ack, 等达到MemStore的刷写时机后,将数据刷写到HFile。

读流程

  1. Client先访问zookeeper,获取hbase:meta表所在的Region Server, 查询hbase:meta表获取目标Redgion Server. 在将该表的region信息以及meta表的位置信息缓存在客户端的meta cache之后与目标Region Sever进行通讯;
  2. 分别在Block Cache(读缓存),MemStore和Store File(HFile)中查询目标数据,并将查到的所有数据块进行合并, 之后缓存到Block Cache中。

    此处所有数据是指同一条数据的不同版本(time stamp)或者不同的类型(Put/Delete)。

  3. 将合并后的最终结果返回给客户端。

参考文献

HBase读写流程

原文地址:https://www.cnblogs.com/bitbitbyte/p/13247879.html