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【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读缓存和读路径文章插图