网易视频云技术分享:HBase BlockCache系列 - 探求BlockCache实现机制.docx

网易视频云技术分享:HBase BlockCache系列 - 探求BlockCache实现机制.docx

ID:62029183

大小:133.06 KB

页数:9页

时间:2021-04-15

网易视频云技术分享:HBase BlockCache系列 - 探求BlockCache实现机制.docx_第1页
网易视频云技术分享:HBase BlockCache系列 - 探求BlockCache实现机制.docx_第2页
网易视频云技术分享:HBase BlockCache系列 - 探求BlockCache实现机制.docx_第3页
网易视频云技术分享:HBase BlockCache系列 - 探求BlockCache实现机制.docx_第4页
网易视频云技术分享:HBase BlockCache系列 - 探求BlockCache实现机制.docx_第5页
资源描述:

《网易视频云技术分享:HBase BlockCache系列 - 探求BlockCache实现机制.docx》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、优选网易视频云技术分享:HBaseBlockCache系列-探求BlockCache实现机制网易视频云是网易公司旗下的视频云服务产品,以Paas服务模式,向开发者提供音视频编解码SDK和开放API,助力APP接入音视频功能。现在,网易视频云的技术专家给大家分享一篇技术性文章,本文在上文的基础上深入BlockCache内部,对各种BlockCache方案具体工作原理进行详细分析。Note:因为SlabCache方案在0.98版本已经不被建议使用,因此本文不针对该方案进行讲解;至于LRU方案和Bucket方案,因为后者更加复杂,本文也会花更多篇幅详细介绍该方案的实现细节。  L

2、RUBlockCache  LRUBlockCache是HBase目前默认的BlockCache机制,实现机制比较简单。它使用一个ConcurrentHashMap管理BlockKey到Block的映射关系,缓存Block只需要将BlockKey和对应的Block放入该HashMap中,查询缓存就根据BlockKey从HashMap中获取即可。同时该方案采用严格的LRU淘汰算法,当BlockCache总量达到一定阈值之后就会启动淘汰机制,最近最少使用的Block会被置换出来。在具体的实现细节方面,需要关注三点:  1.缓存分层策略  HBase在LRU缓存基础上,采用了缓存

3、分层设计,将整个BlockCache分为三个部分:single-access、mutil-access和inMemory。需要特别注意的是,HBase系统元数据存放在InMemory区,因此设置数据属性InMemory=true需要非常谨慎,确保此列族数据量很小且访问频繁,否则有可能会将hbase.meta元数据挤出内存,严重影响所有业务性能。9/9优选  2.LRU淘汰算法实现  系统在每次cacheblock时将BlockKey和Block放入HashMap后都会检查BlockCache总量是否达到阈值,如果达到阈值,就会唤醒淘汰线程对Map中的Block进行淘汰。系统

4、设置三个MinMaxPriorityQueue队列,分别对应上述三个分层,每个队列中的元素按照最近最少被使用排列,系统会优先poll出最近最少使用的元素,将其对应的内存释放。可见,三个分层中的Block会分别执行LRU淘汰算法进行淘汰。  3.LRU方案优缺点  LRU方案使用JVM提供的HashMap管理缓存,简单有效。但随着数据从single-access区晋升到mutil-access区,基本就伴随着对应的内存对象从young区到old区,晋升到old区的Block被淘汰后会变为内存垃圾,最终由CMS回收掉(ConccurentMarkSweep,一种标记清除算法),

5、然而这种算法会带来大量的内存碎片,碎片空间一直累计就会产生臭名昭著的FullGC。尤其在大内存条件下,一次FullGC很可能会持续较长时间,甚至达到分钟级别。大家知道FullGC是会将整个进程暂停的(称为stop-the-wold暂停),因此长时间FullGC必然会极大影响业务的正常读写请求。也正因为这样的弊端,SlabCache方案和BucketCache方案才会横空出世。  BucketCache  相比LRUBlockCache,BucketCache实现相对比较复杂。它没有使用JVM内存管理算法来管理缓存,而是自己对内存进行管理,因此不会因为出现大量碎片导致Full

6、GC的情况发生。本节主要介绍BucketCache的具体实现方式(包括BucketCache的内存组织形式、缓存写入读取流程等)以及如何配置使用BucketCache。9/9优选  内存组织形式  下图是BucketCache的内存组织形式图,其中上面部分是逻辑组织结构,下面部分是对应的物理组织结构。HBase启动之后会在内存中申请大量的bucket,如下图中黄色矩形所示,每个bucket的大小默认都为2MB。每个bucket会有一个baseoffset变量和一个size标签,其中baseoffset变量表示这个bucket在实际物理空间中的起始地址,因此block的物理地

7、址就可以通过baseoffset和该block在bucket的偏移量唯一确定;而size标签表示这个bucket可以存放的block块的大小,比如图中左侧bucket的size标签为65KB,表示可以存放64KB的block,右侧bucket的size标签为129KB,表示可以存放128KB的block。  HBase中使用BucketAllocator类实现对Bucket的组织管理:  1.HBase会根据每个bucket的size标签对bucket进行分类,相同size标签的bucket由同一个BucketSi

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

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

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