HBase BlockCache读缓存和读路径

和其他数据库一样,优化IO也是HBase提升性能的不二法宝,而提供缓存更是优化的重中之重。

根据二八法则,80%的业务请求都集中在20%的热点数据上,因此将这部分数据缓存起就可以极大地提升系统性能。


一、HBase中缓存结构

HBase在实现中提供了两种缓存结构:MemStore和BlockCache。其中MemStore称为写缓存,HBase执行写操作首先会将数据写入MemStore,并顺序写入HLog,等满足一定条件后统一将MemStore中数据刷新到磁盘,这种设计可以极大地提升HBase的写性能。不仅如此,MemStore对于读性能也至关重要,假如没有MemStore,读取刚写入的数据就需要从文件中通过IO查找,这种代价显然是昂贵的!BlockCache称为读缓存,HBase会将一次文件查找的Block块缓存到Cache中,以便后续同一请求或者邻近数据查找请求,可以直接从内存中获取,避免昂贵的IO操作。

HBase BlockCache读缓存和读路径

使用 Scan API 扫描的时候,建议关闭 BlockCache,Scan 的场景中缓存意义不大。

HBase 读取数据的时候优先查找 MemStore(最新的更新版本),其次会查找 BlockCache。首先了解一下 HBase Block 的概念。


二、HBase Block

在 HBase 中,存储文件被划分成若干个小存储块,默认是64k。在 get 或 scan 中一次会完全加载一个 block 到内存中。不同于 HDFS Block,HDFS 层面的块是用于拆分大文件以提供分布式存储,HBase Block 块存在于 HFile 的内部的数据结构。

HBase BlockCache读缓存和读路径

在建表语句中可以通过参数BlockSize指定:BLOCKSIZE => '65536'

HBase BlockCache读缓存和读路径


三、HBase BlockCache

BlockCache是Region Server级别的,一个Region Server只有一个Block Cache,在Region Server启动的时候完成Block Cache的初始化工作。

HBase BlockCache读缓存和读路径

HBase 提供了几种 BlockCache 方案:

  • LruBlockCache
  • SlabCache,HBASE-4027 0.92版本提供,在1.0版本后被废弃 HBASE-11307
  • BucketCache,HBASE-7404 0.95版本提供
  • ExternalBlockCache,HBASE-13170 1.10版本提供
HBase BlockCache读缓存和读路径


四、HBase 读路径

HBase 读路径为,首先检查 MemStore,然后检查 BlockCache,最后检索 HFile,并且合并一条数据的信息(read merge)返回给客户端。

HBase BlockCache读缓存和读路径


分享到:


相關文章: