欢迎来到天天文库
浏览记录
ID:49531667
大小:53.77 KB
页数:7页
时间:2020-03-02
《网易视频云:HBase – Memstore Flush深度解析.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、vcloud.163.com网易视频云:HBase–MemstoreFlush深度解析网易视频云是网易公司旗下的视频云服务产品,以Paas服务模式,向开发者提供音视频编解码SDK和开放API,助力APP接入音视频功能。现在,网易视频云的技术专家给大家分享一则技术深度文章:HBase–MemstoreFlush深度解析。 Memstore是HBase框架中非常重要的组成部分之一,是HBase能够实现高性能随机读写至关重要的一环。深入理解Memstore的工作原理、运行机制以及相关配置,对hbase集群管理、性能调优都有着非常重要的帮助。 Memstore概述 HBase中,Region是
2、集群节点上最小的数据服务单元,用户数据表由一个或多个Region组成。在Region中每个ColumnFamily的数据组成一个Store。每个Store由一个Memstore和多个HFile组成,如下图所示: vcloud.163.com 之前我们提到,HBase是基于LSM-Tree模型的,所有的数据更新插入操作都首先写入Memstore中(同时会顺序写到日志HLog中),达到指定大小之后再将这些修改操作批量写入磁盘,生成一个新的HFile文件,这种设计可以极大地提升HBase的写入性能;另外,HBase为了方便按照RowKey进行检索,要求HFile中数据都按照RowKey进行排序
3、,Memstore数据在flush为HFile之前会进行一次排序,将数据有序化;还有,根据局部性原理,新写入的数据会更大概率被读取,因此HBase在读取数据的时候首先检查请求的数据是否在Memstore,写缓存未命中的话再到读缓存中查找,读缓存还未命中才会到HFile文件中查找,最终返回merged的一个结果给用户。 可见,Memstore无论是对HBase的写入性能还是读取性能都至关重要。其中flush操作又是Memstore最核心的操作,接下来重点针对Memstore的flush操作进行深入地解析:首先分析HBase在哪些场景下会触发flush,然后结合源代码分析整个flush的操作流
4、程,最后再重点整理总结和flush相关的配置参数,这些参数对于性能调优、问题定位都非常重要。 MemstoreFlush触发条件 HBase会在如下几种情况下触发flush操作,需要注意的是MemStore的最小flush单元是HRegion而不是单个MemStore。可想而知,如果一个HRegion中Memstore过多,每次flush的开销必然会很大,因此我们也建议在进行表设计的时候尽量减少ColumnFamily的个数。 Memstore级别限制:当Region中任意一个MemStore的大小达到了上限(hbase.hregion.memstore.flush.size,默认12
5、8MB),会触发Memstore刷新。vcloud.163.com Region级别限制:当Region中所有Memstore的大小总和达到了上限(hbase.hregion.memstore.block.multiplier*hbase.hregion.memstore.flush.size,默认2*128M=256M),会触发memstore刷新。 RegionServer级别限制:当一个RegionServer中所有Memstore的大小总和达到了上限(hbase.regionserver.global.memstore.upperLimit*hbase_heapsize,默认40
6、%的JVM内存使用量),会触发部分Memstore刷新。Flush顺序是按照Memstore由大到小执行,先FlushMemstore最大的Region,再执行次大的,直至总体Memstore内存使用量低于阈值(hbase.regionserver.global.memstore.lowerLimit*hbase_heapsize,默认38%的JVM内存使用量)。 当一个RegionServer中HLog数量达到上限(可通过参数hbase.regionserver.max.logs配置)时,系统会选取最早的一个HLog对应的一个或多个Region进行flush HBase定期刷新Mems
7、tore:默认周期为1小时,确保Memstore不会长时间没有持久化。为避免所有的MemStore在同一时间都进行flush导致的问题,定期的flush操作有20000左右的随机延时。 手动执行flush:用户可以通过shell命令flush‘tablename’或者flush‘regionname’分别对一个表或者一个Region进行flush。 MemstoreFlush流程 为了减少flush过程
此文档下载收益归作者所有