第一章:GC的相关参数配置
1.swap的设置:
我们需要关闭操作系统的swap或是设置swappiness为0,推荐设置为0,这样只有在物理内存不够的情况下才会使用交换分区。这个参数设置是由于JVM虚拟机如果使用了swap在
GC回收时会花费更多的时间,会导致Region server 与ZK 连接超期,Hmaster会认为Region server已经故障,然后开始分裂HLog和重新分配Region,即使Region server完成GC后,再次上报
信息给Hmaster时,Hmaster也会抛YouAreDead的异常给Region server和让它退出服务, 所以这个参数的配置是一个必须条件。
2.GC回收采用并行增量式的方式,目前在0.90的默认配置,以我的经验在这个配置下我们目前还没有发现由于full GC的情况。 按照社区给的意见大概1G的内存的如果Full GC可能需要10s中的时间,所以我们要设置ZK的session时长和内存大小到一个比较合适的值,减少因为full GC产生当机的情况。 另外,我们一定要注意一下参数:
-XX:CMSInitiatingOccupancyFraction=70
70为JVM的使用百分比,当达到这个阈值后将启动回收任务。这个值比较合适的值是要略大于memstoresize 40%+ blockcache 20%。
3、开启特性MLAB
MLAB特性是在分析了HBase产生内存碎片的根因后给出了解决方案,这个方案虽然不能够完全解决Full GC带来的问题,但是一定程度上延缓了full GC的产生间隔。MLAB在0.90版本默认是关闭的 在0.92版本是默认打开(92版本最近准备发布了,已经拉出分支来了)。 使用这个特性时,一定要注意如果keyvalue,如果这个值很大的情况要增加chunk值(目前默认2M)
第二章:集群参数的配置
1. zookeeper.session.timeout(默认3分钟)
ZK的超期参数,默认配置为3分钟,在生产环境上建议减小这个值在1分钟或更小。
设置原则:这个值越小,当RS故障时Hmaster获知越快,Hlog分裂和region 部署越快,集群恢复时间越短。 但是,设置这个值得原则是留足够的时间进行GC回收,否则会导致频繁的RS当机。
2、hbase.regionserver.handler.count(默认10)
设置原则:
对于大负载的put(达到了M范围)或是大范围的Scan操作,handler数目不易过大,易造成OOM。
对于小负载的put或是get,delete等操作,handler数要适当调大。
根据上面的原则,要看我们的业务的情况来设置。
3、HBASE_HEAPSIZE 大小设置
设置原则:
a. HBASE_HEAPSIZE 包括三部分内容:Memstoresize 40%(默认) blockcache 20% 以及StoreIndex(这需要根据硬盘容量算出)。
b. GC回收的时间不要超过zk session的时间。
4.选择使用压缩算法,目前HBase默认支持的压缩算法包括GZ,LZO以及snappy(0.92版本已经支持,BSD license)
Algorithm % remaining Encoding Decoding
GZIP 13.4% 21 MB/s 118 MB/s
LZO 20.5% 135 MB/s 410 MB/s
Zippy/Snappy 22.2% 172 MB/s 409 MB/s
根据你产品的情况选取这里压缩算法或是使用其他压缩算法。
5.hbase.hregion.max.filesize 默认256M
关于Region Size的设置,参考另外一篇博客。
设置原则:
a、Region server 上活跃的region不能太多100个左右,且也不要太少会导致并发度不大。
b、在region设置比较大时,例如每个region达到100G时,需要手动进行对热点region进行split或是对于不经常活跃的进行merge
6.hbase.hregion.memstore.block.multiplier 默认2
设置原则:
如果内存足够的,可以适当设置大这个值,当memstoresize 大于 flush size limit*multiplier时会阻塞客户的put操作。如果出现这种情况多数原因是由于compaction队列不能够及时处理
导致的。
7.hbase.hstore.blockingStoreFiles 默认7
设置原则:
这个值设置比较大,会增加客户端的负载处理能力,但是如果你的服务器一直处于一个高的水平,那说明你的机器已经达到性能瓶颈,需要其他方式解决