• 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读写流程

  • 相关阅读:
    AOP Aspect 统一日志、异常处理、数据格式
    java基本成员默认值
    Jackson ObjectMapper
    logstash 安装 jdbc-output出错
    ElasticSearch定时删除数据(非时间结尾规律索引)
    docker安装部署
    K8s 使用helm 安装 EFK和ELK分布式日志分析系统系列(es版本:6.7.0;)
    JWT 验证
    JS查找数组中元素index
    oracle not in 失效
  • 原文地址:https://www.cnblogs.com/bitbitbyte/p/13247879.html
Copyright © 2020-2023  润新知