HBASE修炼之路——00004(HBase 性能优化方案1.0)

一、垃圾回收优化

-verbose:gc -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -Xloggc: $ HBASE_HOME/logs/gc-$(hostname)-hbase.log
-XX:+UseParNewGC -XX:+UseConcMarkSweepGC
-XX:CMSInitiatingOccupancyFraction=70

二、本地 memostore 分配缓冲区(使用MSLAB是有代价的:它将更加浪费堆空间,因为用户不太可能把缓冲区都用到最后一个字节,剩余的没有使用的空间将被浪费掉,用户需要在压缩收集器造成的服务停止和额外空间消耗之间找到一个平衡)

hbase.hregion.memstore.mslab.enabled
hbase.hregion.memstore.mslab.max.allocation 默认值:256KB

三、压缩
1、压缩通常都会带来较好的性能,因为CPU压缩和解压消耗的时间比从磁盘中读取和写入更多数据消耗的时间更短;
2、目前最优的压缩算法为Snappy

四、优化拆分和合并
1、管理拆分:与其依赖HBase自动管理拆分,用户不如关闭这个行为然后手动调用split和major_compact命令。(可以通过设置这个集群的hbase.hregion.max.filesize 值来完成,为了防止手动拆分无法运行,最好不要将其设置为Long.MAX_VALUE。 50-100G即可)
2、手动拆分和压缩的好处是可以进行时间控制,在不同的region上交错运行,这样尽可能分散I/O负载,并且避免拆分/合并风暴。
3、拆分/合并风暴:当用户的region大小以恒定的速度保持增长时,region拆分会在同一时间发生,因为同时需要压缩region中的存储问ijan,这个过程会重写拆分之后的region,这将会引起磁盘I/O上升。
4、region热点问题:
1)采用盐析主键的方式(salt key)
2)使用随机的行键来负载均衡
3)手动将热点region按特定的边界拆分出一个或者多个新region
5、预拆分region:用户可以在创建表时,指定需要的region数目来达到预拆分的目的。
6、负载均衡:
1)默认情况下,均衡器每隔5分钟运行一次,通过hbase.balancer.period 设置,一旦均衡器启动,将会尝试均匀分配region到所有region服务器。
2)可以通过 hbase.balancer.max.balancing 来限制均衡器运行时间的上限
3)可以使用move命令和API 手动将region移动到另一个服务器上
7、合并region:减少region的个数
8、客户端API调用优化:
1)禁止自动刷写:setAutoFlush(false)
2)使用扫描缓存:setCaching(500)
3)限定扫描范围:指定特殊的列字段(Scan.addFamily())
4)关闭ResultScanner
5)块缓存用法:setCacheBlocks()
6)优化获取行键的方式:过滤器(FirstKeyFilter 和 KeyOnlyFilter)
7)关闭Put上的WAL:writeToWAL(false) 有数据丢失风险
9、参数配置
1)减少ZOOKEEPER超时的发生: ticktime zookeeper.session.timeout
2)增加处理线程:hbase.regionserver.handle.count 默认值10偏小 (太高:会导致region服务器内存压力变大,JVM的垃圾回收会更频繁)
3)增加堆大小:HBASE_REGIONSERVER_OPTS
4)启用数据压缩:Snappy
5)增加region的大小:hbase.hregion.max.filesize
6)调整块缓存的大小:perf.hfile.block.cache.size 默认值 0.2
7)调整memstore限制:hbase.regionserver.global.memstore.upperLimit 默认值 0.4 ,hbase.regionserver.global.memstore.lowerLimit 设置为 0.35 ,
8)增加阻塞时存储文件数目:hbase.hstore.blockingStoreFiles 默认值是 7 ,它决定了当存储文件的数目达到阈值时,更新操作(put /delete等)将会被阻塞,并以此来给合并操作留出时间来减少存储文件的数目。
9)增加阻塞倍率:hbase.hregion.memstore.block.multipliter 默认值时2 ,当memstore达到属性multiplier 乘以 flush的大小限制时会阻止进一步的更新
10)减少最大日志文件按限制:hbase.regionserver.maxlogs 可以控制基于磁盘的WAL文件数目,进而控制刷写频率。该参数的默认值是32,对于写压力比较大的应用来说这个值有点高。降低这个值会强迫服务器更频繁地将数据刷写到磁盘上,这样已经刷写到磁盘上的数据所对应的日志就可以被丢弃了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值