HBase内存配置及JVM优化 (3)

Memstore Flush操作

操作级别 触发条件 影响度
memstore级别   当region中任意一个memstore的大小达到了上限
即>hbase.hregion.memstore.flush.size = 256mb
  小,短暂阻塞写  
region级别   当region中所有的memstore的大小达到了上限
即>hbase.hregion.memstore.block.multiplier * hbase.hregion.memstore.flush.size = 8 * 256mb
  小,短暂阻塞写  
regionserver级别   当一个regionserver中所有memstore的大小达到了上限
即> hbase.regionserver.global.memstore.size * heap_size = 0.22*75g
  大,阻塞regionserver上的所有写请求且时间较长  
regionserver中WAL Log数量达到上限   > hbase.regionserver.maxlogs = 256
系统会选取最早的一个 WAL Log对应的一个或多个region进行flush
  小,短暂阻塞写  
定期刷新   > hbase.regionserver.optionalcacheflushinterval = 3600000   小,短暂阻塞写  
手动刷新   用户可以通过shell命令flush table 或者flush region name分别对一个表或者一个region进行flush   小,短暂阻塞写  

Memstore设置总结

从memstore flush的动作来看,对业务影响最大是regionserver级别的flush操作,假设每个memstore大小为256mb,每个region有两个cf,整个regionserver上有100个region,根据计算可知,总消耗内存 = 256mb2100 = 51.2g >> 0.40*80g = 32g ,很显然这样的设置情况下,很容易触发region server级别的flush操作,对用户影响较大。
根据如上分析,memstore的设置大小不仅取决于读写的比例,也要根据业务的region数量合理分配memstore大小,同样的我们对每台regionserver上region的数量及每张表cf的数量上的控制也能达到理想的效果。

堆外内存注意事项 Bucketcache的三种工作模式

heap

heap模式分配内存会调用byteBuffer.allocate方法,从JVM提供的heap区分配。
内存分配时heap模式需要首先从操作系统分配内存再拷贝到JVM heap,相比offheap直接从操作系统分配内存更耗时,但反之读取缓存时heap模式可以从JVM heap中直接读取比较快。

offheap

offheap模式会调用byteBuffer.allocateDirect方法,直接从操作系统分配,因为内存属于操作系统,所以基本不会产生CMS GC,也就在任何情况下都不会因为内存碎片导致触发Full GC。
内存分配时offheap直接从操作系统分配内存比较快,但反之读取时offheap模式需要首先从操作系统拷贝到JVM heap再读取,比较费时。

file

file使用Fussion-IO或者SSD等作为存储介质,相比昂贵的内存,这样可以提供更大的存储容量。

堆外内存的优势

使用堆外内存,可以将大部分BlockCache读缓存迁入BucketCache,减少jvm heap的size,可以减少GC发生的频次及每次GC时的耗时
BucketCache没有使用JVM 内存管理算法来管理缓存,而是自己对内存进行管理,因此其本身不会因为出现大量碎片导致Full GC的情况发生。

堆外内存的缺陷

读取data block时,需要将off heap的内存块拷贝到jvm heap在读取,比较费时,对读性能敏感用户不太合适。

堆外内存使用总结

对于读多写少且对读性能要求不高的业务场景,offheap模式能够有效的减少gc带来的影响,线上的vac集群在开启offheap模式后,GC频次和耗时都能有效降低,但是因为bucketcache 读的性能的问题达不到要求而回退到heap模式。

JVM的配置优化及详解

Hbase服务是基于JVM的,其中对服务可用性最大的挑战是jvm执行full gc操作,此时会导致jvm暂停服务,这个时候,hbase上面所有的读写操作将会被客户端归入队列中排队,一直等到jvm完成gc操作, 服务在遇到full gc操作时会有如下影响

hbase服务长时间暂停会导致客户端操作超时,操作请求处理异常。

服务端超时会导致region信息上报异常丢失心跳,会被zk标记为宕机,导致regionserver即便响应恢复之后,也会因为查询zk上自己的状态后自杀,此时hmaster 会将该regionserver上的所有region移动到其他regionserver上

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wsfpfx.html