网易视频云:HBase BlockCache系列–走进BlockCac

网易视频云:HBase BlockCache系列–走进BlockCac

ID:38684175

大小:44.97 KB

页数:5页

时间:2019-06-17

网易视频云:HBase BlockCache系列–走进BlockCac_第1页
网易视频云:HBase BlockCache系列–走进BlockCac_第2页
网易视频云:HBase BlockCache系列–走进BlockCac_第3页
网易视频云:HBase BlockCache系列–走进BlockCac_第4页
网易视频云:HBase BlockCache系列–走进BlockCac_第5页
资源描述:

《网易视频云:HBase BlockCache系列–走进BlockCac》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、vcloud.163.com网易视频云:HBaseBlockCache系列–走进BlockCac 和其他数据库一样,优化IO也是HBase提升性能的不二法宝,而提供缓存更是优化的重中之重。最理想的情况是,所有数据都能够缓存到内存,这样就不会有任何文件IO请求,读写性能必然会提升到极致。然而现实是残酷的,随着请求数据的不断增多,将数据全部缓存到内存显得不合实际。幸运的是,我们并不需要将所有数据都缓存起来,根据二八法则,80%的业务请求都集中在20%的热点数据上,因此将这部分数据缓存起就可以极大地提升系统性能。  HBase在

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

3、据查找请求,可以直接从内存中获取,避免昂贵的IO操作。MemStore相关知识可以戳这里,本文将重点分析BlockCache。  在介绍BlockCache之前,简单地回顾一下HBase中Block的概念,详细介绍戳这里。Block是HBase中最小的数据存储单元,默认为64K,在建表语句中可以通过参数BlockSize指定。HBase中Block分为四种类型:DataBlock,IndexBlock,BloomBlock和MetaBlock。其中DataBlock用于存储实际数据,通常情况下每个DataBlock可以存放

4、多条KeyValue数据对;IndexBlock和BloomBlock都用于优化随机读的查找路径,其中IndexBlock通过存储索引数据加快数据查找,而BloomBlock通过一定算法可以过滤掉部分一vcloud.163.com定不存在待查KeyValue的数据文件,减少不必要的IO操作;MetaBlock主要存储整个HFile的元数据。  BlockCache是RegionServer级别的,一个RegionServer只有一个BlockCache,在RegionServer启动的时候完成BlockCache的初始化工

5、作。到目前为止,HBase先后实现了3种BlockCache方案,LRUBlockCache是最初的实现方案,也是默认的实现方案;HBase0.92版本实现了第二种方案SlabCache,见HBASE-4027;HBase0.96之后官方提供了另一种可选方案BucketCache,见HBASE-7404。  这三种方案的不同之处在于对内存的管理模式,其中LRUBlockCache是将所有数据都放入JVMHeap中,交给JVM进行管理。而后两者采用了不同机制将部分数据存储在堆外,交给HBase自己管理。这种演变过程是因为LR

6、UBlockCache方案中JVM垃圾回收机制经常会导致程序长时间暂停,而采用堆外内存对数据进行管理可以有效避免这种情况发生。  LRUBlockCache  HBase默认的BlockCache实现方案。Block数据块都存储在JVMheap内,由JVM进行垃圾回收管理。它将内存从逻辑上分为了三块:single-access区、mutil-access区、in-memory区,分别占到整个BlockCache大小的25%、50%、25%。一次随机读中,一个Block块从HDFS中加载出来之后首先放入signle区,后续如

7、果有多次请求访问到这块数据的话,就会将这块数据移到mutil-access区。而in-memory区表示数据可以常驻内存,一般用来存放访问频繁、数据量小的数据,比如元数据,用户也可以在建表的时候通过设置列族属性IN-MEMORY=true将此列族放入in-memory区。很显然,这种设计策略类似于JVM中young区、old区以及perm区。无论哪个区,系统都会采用严格的vcloud.163.comLeast-Recently-Used算法,当BlockCache总量达到一定阈值之后就会启动淘汰机制,最少使用的Block会

8、被置换出来,为新加载的Block预留空间。  SlabCache  为了解决LRUBlockCache方案中因为JVM垃圾回收导致的服务中断,SlabCache方案使用JavaNIODirectByteBuffer技术实现了堆外内存存储,不再由JVM管理数据内存。默认情况下,系统在初始化的时候会分配两个

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。