HBase 集群配置和GC配置

HBase 集群环境

HMaster(40 Core 126 G 4.4 T) x 1 Java Heap 1G
HRegionServer (40 Core 126 G 4.4 T) x 3 Java Heap 31G Memstore 0.4 BlockCache 0.4
CDH:5.12.2
Hadoop:2.6.0-cdh5.12.2
HBase:1.2.0-cdh5.12.2
JDK 1.8.0_191

使用场景

实时:
随机读,读多行,更新多列,读写比例 1:1,开启 MinorCompact。

离线:
Scan HFile,计算结果批量更新HBase(全部 Rowkey,更新不同的 Cells)

HBase 配置

默认配置可适用大部分业务场景,针对不通问题,做如下调整:

配置项 配置值 描述
hbase.client.write.buffer 2M → 8M Client Write Buffer,批量写可以调大
hbase.hregion.max.filesize 10 → 20 HBase 文件最大大小,超过会自动触发 Split。
尽量预分 Region,不要自动
hbase.hregion.memstore.block.multiplier 2 → 4 当 Region 的 Memstore 大小超过 Memstore 最大大小的 x 倍时,阻塞写操作。
离线计算时,单个 Region 进行处理,数据量大时会出现大量的 Blocking errorhbase.server.thread.wakefrequency
hbase.hstore.blockingStoreFiles 16->200 当某一个 Region 的 storefile 个数达到该值则block写入,等待 Compact。
直到超过 hbase.hstore.blockingWaitTime 配置的时间,太小对写入影响比较大,memstore不能及时 flush。
更容易触发 hbase.hregion.memstore.block.multiplier 限制
hbase.hstore.compactionThreshold 3->5 对于开启了 Compaction 的表,可以减少合并的次数
hbase.regionserver.handler.count 30 → 50 Regionserver 处理IO请求的线程数,提高实时响应
hbase.regionserver.maxlogs 32 → 180 HLog 数量达到最高值,执行 MemStore flush。
经测试,特定业务场景批量写入HLog 数量在100-160间波动,考虑到写的数据量更大的情况,防止频繁写阻塞,可设置为180或更大
hbase.regionserver.thread.compaction.small 1 → 3 Minor compaction 线程数,加快 Compaction
zookeeper.session.timeout 60000 → 120000 Zookeeper 连接超时时间,可以调大。
同时 Zookeeper 的 maxSessionTimeout 也需要调大,该值不能超过 maxSessionTimeout

GC 使用

RegionServer 使用 G1GC,Master 使用默认

-XX:+UseG1GC -XX:G1HeapRegionSize=16m 
-XX:MaxGCPauseMillis=200 
-XX:MaxTenuringThreshold=1 
-XX:+ParallelRefProcEnabled 
-XX:-ResizePLAB 
-XX:ParallelGCThreads=28 
-XX:ConcGCThreads=7 
-XX:+UseStringDeduplication 
-XX:+PrintGC 
-XX:+PrintGCTimeStamps 
-XX:+PrintAdaptiveSizePolicy 
-XX:+PrintGCDetails 
-Xloggc:/opt/cloudera/parcels/CDH/lib/hbase/logs/gc.log

G1 主要参数配置

G1 不需要指定新生代大小占比,会根据策略和GC最大停顿时间自动调整新生代大小。

参数 描述
-XX:G1HeapRegionSize=16m 指定G1每个 Region 的大小。
值是2的幂,范围是1 MB到32 MB之间。
目标根据最小的 Java 堆大小划分出约 2048 个区域
-XX:MaxGCPauseMillis=200 设置最大GC停顿时间
-XX:MaxTenuringThreshold=1 提升年老代的最大临界值(tenuring threshold)。
默认值为 15
-XX:+ParallelRefProcEnabled 并行处理 RefProc 阶段,有些默认使用单线程处理
-XX:-ResizePLAB 关闭 PLAB 的大小调整,避免大量的线程通信导致性能下降
-XX:ParallelGCThreads=28 STW 时并行工作的线程数。一般可以设置为逻辑处理器数的 5/8
-XX:ConcGCThreads=7 并发标记阶段,并行执行的线程数。一般为 ParallelGCThreads 的 1/4
-XX:+UseStringDeduplication 相同 String 避免重复申请内存
-XX:InitiatingHeapOccupancyPercent 触发标记周期的 Java 堆占用率阈值。
默认值是45%。
-XX:G1HeapWastePercent=5 可容忍的浪费堆空间百分比。
如果可回收百分比小于该设置的百分比,JVM不会启动混合垃圾回收周期。
XX:G1ReservePercent=10 预留多少内存,防止晋升失败的情况。
默认值是10

Tags:

Add a Comment

电子邮件地址不会被公开。 必填项已用*标注