zoukankan      html  css  js  c++  java
  • 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读写流程

  • 相关阅读:
    Django 之memcached的应用
    Django 之验证和授权
    Django 之安全篇
    Django 之上下文处理器和中间件
    博客都在标签里。
    kubernetes下rook-ceph部署
    Istio部署
    推荐一个学习k8s网站
    今天发生了一件事。。
    推荐书单,电影等
  • 原文地址:https://www.cnblogs.com/bitbitbyte/p/13247879.html
Copyright © 2011-2022 走看看