HBase写流程基本概念

作者: 掩流年 | 来源:发表于2020-12-27 23:39 被阅读0次

在HBase写入的过程中,要从client和server端两部分来看。
在client端,会将写入的数据添加到本地缓冲区中,符合一定条件就会通过AsyncProcess异步批量提交。然后会去查找meta表,根据rowkey查找到对应的region信息,直接连接到对应的regionServer,进行写操作。
在regionServer端,为了保证写入数据在异常情况下不丢数据以及保证写入速度。分别引入了HLog和MemStore。HLog的主要作用是在机器或者HBase数据异常情况下进行数据恢复的。MemStore是为数据提供了一块内存存储,当这块存储达到一定的阈值,就把数据flush到HFile中进行持久化存储。以下会分别介绍HLog和MemStore是如何工作的。

HLog

在写操作的时候,client的数据会先同步到HLog,之后才会写入Memstore中,当此时HBase发生异常,MemStore中的数据会丢失,这时候会从HLog中加载数据进行恢复操作。
每个RegionServer拥有一个或多个HLog。存储在/hbase/WALs文件夹下。在2.0之后,可以通过WALPrettyPrinter进行HLog内容的打印。

 $ ./bin/hbase wal
hdfs://example.org:8020/hbase/WALs/example.org,60020,1283516293161/10.10.21.10%3A60020.1283973724012

在之前的版本可以使用

$ ./bin/hbase hlog hdfs://example.org:8020/hbase/.logs/example.org,60020,1283516293161/10.10.21.10%3A60020.1283973724012

生命周期

一旦对数据进行修改,插入,删除等操作的时候,这些操作都会先写入HLog中。对于HLog中数据的管理有四个阶段。

  • 把来自client的数据直接同步写入到HLog文件中。
  • 按照配置hbase.regionserver. logroll.period定时去新建一个新的HLog文件接受新的请求。
  • 一旦数据在HFile中落盘就把HLog中的数据标记为过期。如果日志中所有日志记录已经落盘,则可以认为该日志文件失效。同时移到oldWALs文件夹。
  • 根据配置hbase.master.cleaner. interval'定时删除过期日志文件。

MemStore

对于MemStore,在写操作之间做缓存主要有以下好处:

  • 可以减少flush的次数。
  • 当此时有读操作可以直接从内存操作。
  • HFile中KeyValue数据需要按照Key排序,在MemStore中可以执行这个排序过程。

内部结构

HBase采用了跳跃表的数据结构,在Java实现中,直接使用了JDK的ConcurrentSkipListMap。可以保证线程安全的读写操作。

基本操作

  • 检查当前可用的Chunk是否写满,如果写满,重新申请一个2M的Chunk。(关于Chunk和ChunkPool参见HBASE-8163
  • 将当前KeyValue在内存中重新构建,在可用Chunk的指定offset处申请内存创建一个新的KeyValue对象。
  • 将新创建的KeyValue对象写入ConcurrentSkipListMap中。

HFile

HFile的逻辑结构图如下:


HFile V2逻辑结构图

HFile依次由Scanned Block、Non-scanned Block、Load-on-open以及Trailer四个部分组成。
MemStore中KV在flush成HFile时首先构建Scanned Block部分,即KV写进来之后先构建Data Block并依次写入文件,在形成Data Block的过程中也会依次构建形成Leaf index Block、Bloom Block并依次写入文件。一旦MemStore中所有KV都写入完成,Scanned Block部分就构建完成。Non-scanned Block、Load-on-open以及Trailer这三部分是在所有KV数据完成写入后再追加写入的。

相关文章

  • HBase系列 - 概念和架构原理

    前言 本文主要介绍HBase基本概念以及架构原理包含数据模型、基础进程组件。再从HBase的写流程和读流程去了解H...

  • HBase写流程基本概念

    在HBase写入的过程中,要从client和server端两部分来看。在client端,会将写入的数据添加到本地缓...

  • HBase架构详解及读写流程

    目录一、HBase存储结构详解二、HBase写流程三、HBase读流程 Hbase是bigtable的开源山寨版本...

  • HBase读写数据流程

    目录一.读写流程1.1 HBase读数据流程1.2 HBase写数据流程二. 退役(decommissioning...

  • HBase写数据的异常问题以及优化

    本篇文章来说道说道如何诊断HBase写数据的异常问题以及优化写性能。和读相比,HBase写数据流程倒是显得很简单:...

  • Hbase读写流程

    写流程hbase write process.jpg流程描述 1.Client获取数据写入的Region所在的R...

  • 解析HBase原理之数据读取流程

    和写流程相比,HBase读数据是一个更加复杂的操作流程,这主要基于两个方面的原因: 其一是因为整个HBase存储引...

  • HBase原理——数据读取流程解析

    和写流程相比,HBase读数据是一个更加复杂的操作流程,这主要基于两个方面的原因:其一是因为整个HBase存储引擎...

  • HBase 架构原理-数据读取流程解析

    和写流程相比,HBase读数据是一个更加复杂的操作流程,这主要基于两个方面的原因: 其一是因为整个HBase存储引...

  • Hbase学习资料

    HBase数据模型解析和基本的表设计分析 Hbase原理、基本概念、基本架构 HBase 超详细介绍 Apache...

网友评论

    本文标题:HBase写流程基本概念

    本文链接:https://www.haomeiwen.com/subject/tceanktx.html