HBase权威指南(五)架构

2022-03-13  本文已影响0人  kaiker

1、数据查找和传输

  • LSM树,输入数据首先被存储在日志文件,这些文件内的数据完全有序,当有日志文件被修改时,对应的更新会被先保存在内存中来加速查询。
  • 当系统经历过多次数据修改,且内存空间被逐渐占满,LSM树会把有序的键记录对写到磁盘中,同时创建一个新的数据存储文件。内存中保存的内容可丢弃掉。
  • 所有节点都是满的并按页存储
LSM

多次刷写后产生许多数据存储文件,后台线程就会自动将小文件聚合成大文件。
查询时先查找内存中的存储,再查找磁盘上的文件。
删除是一种特殊的更改,查找时会跳过删除过的键。

https://blog.csdn.net/MingYueZh/article/details/80839868

在没有太多修改时,B+树表现更好,因为这些修改要求执行高代价的优化操作以保证查询能在有限时间内完成。
在内存中排序,将随机写转换成顺序写,保证稳定的数据插入速率。

2、存储

HBase透明地操作存储在HDFS上文件的概览

主要处理预写日志和实际数据文件。主要由HRegionServer管理。

HRegionServer负责打开region,并创建对应的HRegion实例。为每个表的HColumnFamily创建Store实例,Store实例包含一个或多个StoreFile实例,是HFile轻量封装,HFile实际存储数据文件。每个Store还有对应一个MemStore。

文件

HFile格式

HFile格式 HFile块透明地存储在更大的HDFS块中

KeyValue格式

HFile中的每个KeyValue都是一个低级的字节数据,允许零复制访问数据。


KeyValue格式

键包含行键、列族名、列限定符等。

3、WAL

MemStore存储在内存中相对是不稳定的,WAL可以解决这一问题。
WAL存储了对数据的所有更改。


所有修改先保存到WAL再传递给MemStore

HLog类

HRegion被实例化时,HLog实例会被当做一个参数传入到HRegion的构造器中。
追踪修改,内部使用一个进程安全的AtomicLong,当region打开它的存储文件时,它读取存储在每一个HFile中meta域中最大的序列号,并且如果这个序列号大于之前记录的序列号,它就会被初始化以反映存储在哪里结束以及从哪里继续存储。

HLog

回放

集群启动或服务失效时会进行回放。
region首先检查recovered.edits目录是否存在。由于文件是按照含序列ID文件名排序的,region可以按照序列ID的顺序来恢复。如果这个ID比硬盘上存的ID小就会被胡烈。
一旦recovered.edits文件中的文件都处理完,且其中的数据更改也都被写入到硬盘后,该文件删除。

4、读路径

HBase每个列族使用多个存储文件来进行存储,这些文件包含着实际的数据单元或KeyValue实例。
所有存储文件都是不可变的,从这些文件中删除一个特定的值是做不到的。
实际上数据存储在分离的KeyValue实例中,横跨任意数目个存储文件。

扫描行

skipped根据时间戳和布隆过滤器。
ResultScanner会重复调用next()直到到达结束行或表的结尾,或者已经读取到缓存设定的足够多行。

5、region查找。

查询过程

如果region、meta region和root region缓存失效,还需要额外3次查询。

6、复制

HBase复制中最基本的架构模式是主推送模式。


集群复制架构
上一篇下一篇

猜你喜欢

热点阅读