欢迎来到天天文库
浏览记录
ID:38684175
大小:44.97 KB
页数:5页
时间:2019-06-17
《网易视频云: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管理数据内存。默认情况下,系统在初始化的时候会分配两个
此文档下载收益归作者所有