A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 玩转曼哈顿 于 2019-3-8 12:09 编辑

一、服务器参数调优
1、hbase.regionserver.handler.count:增加服务器的处理线程数
        hbase.regionserver.handler.count:该设置决定了处理RPC的线程数量,默认值是10。这样设置的目的是防止服务器在某些情况吓出现内存耗尽的情况。
        如果服务器上的可用内存较少,就应该将该属性设置为较低的值。如果每个请求只需要一点点的内存,但是每秒TPS却很高,那就应该将此属性调大,使服务器能处理更多的并发请求。
        设置该属性使建议启用RPC级的日志记录功能,然后控制RPC请求的内存使用情况和GC状态。

2、 hbase.hregion.max.filesize
         hbase.hregion.max.filesize: 默认值是10G,region的大小与集群支持的总数据量有关系,如果总数据量小,则单个region太大,不利于并行的数据处理,如果集群需支持的总数据量比较大,region太小,则会导致region的个数过多,导致region的管理等成本过高,如果一个RS配置的磁盘总量为3T*12=36T数据量,数据复制3份,则一台RS服务器可以存储10T的数据,如果每个region最大为10G,则最多1000个region,如此看,94.12的这个默认配置还是比较合适的,不过如果要自己管理split,则应该调大该值,并且在建表时规划好region数量和rowkey设计,进行region预建,做到一定时间内,每个region的数据大小在一定的数据量之下,当发现有大的region,或者需要对整个表进行region扩充时再进行split操作,一般提供在线服务的hbase集群均会弃用hbase的自动split,转而自己管理split。
3、hbase.hregion.majorcompaction
        hbase.hregion.majorcompaction:置major合并的间隔时间,默认为1天,可设置为0,禁止自动的major合并,可手动或者通过脚本定期进行major合并,有两种compact:minor和major,minor通常会把数个小的相邻的storeFile合并成一个大的storeFile,minor不会删除标示为删除的数据和过期的数据,major会删除需删除的数据,major合并之后,一个store只有一个storeFile文件,会对store的所有数据进行重写,有较大的性能消耗。
4、file.block.cache.size
        file.block.cache.size:Sblock cache的内存大小限制,默认值0.25,在偏向读的业务中,可以适当调大该值,具体配置时需试hbase集群服务的业务特征,结合memstore的内存占比进行综合考虑。
5、hbase.regionserver.regionSplitLimit
        hbase.regionserver.regionSplitLimit:最大的region数量,超过则不可以进行split操作,默认是Integer.MAX,可设置为1,禁止自动的split,通过人工,或者写脚本在集群空闲时执行。如果不禁止自动的split,则当region大小超过hbase.hregion.max.filesize时会触发split操作(具体的split有一定的策略,不仅仅通过该参数控制,前期的split会考虑region数据量和memstore大小),每次flush或者compact之后,regionserver都会检查是否需要Split,split会先下线老region再上线split后的region,该过程会很快,但是会存在两个问题:1、老region下线后,新region上线前client访问会失败,在重试过程中会成功但是如果是提供实时服务的系统则响应时长会增加;2、split后的compact是一个比较耗资源的动作。
6、hbase.hregion.memstore.block.multiplier
        hbase.hregion.memstore.block.multiplier:默认值2,如果memstore的内存大小已经超过了hbase.hregion.memstore.flush.size的2倍,则会阻塞memstore的写操作,直到降至该值以下,为避免发生阻塞,最好调大该值,比如:4,不可太大,如果太大,则会增大导致整个RS的memstore内存超过memstore.upperLimit限制的可能性,进而增大阻塞整个RS的写的几率。如果region发生了阻塞会导致大量的线程被阻塞在到该region上,从而其它region的线程数会下降,影响整体的RS服务能力
列如:
        hbase.hregion.memstore.flush.size为128m,hbase.hregion.memstore.block.multiplier默认为2。所以达到hbase.hregion.memstore.flush.size的2倍时(128*2=256m)等于256m时就会发生阻塞。所以我们要调高阻塞阈值。
7、hbase.hregion.memstore.flush.size
        hbase.hregion.memstore.flush.size:默认值128M。一般不会去做改变。
8、hbase.hstore.blockingStoreFiles
        hbase.hstore.blockingStoreFiles:默认为7。调高为20。因为如果任何一个Store的StoreFiles数超过hbase.hstore.blockingStoreFiles(默认为7)就会发生阻塞。直到合并完成或超过hbase.hstore.blockingWaitTime(默认为90m)所指定的时间为止。
注意:hbase的写操作会首先在memStore中生效,然后等到memStore达到一定大小以后就会写入HDFS,从而省出一部分内存空间。memStore写磁盘的操作以后台的方式运行,使用的是memStore快照。所以,即便是memStore写磁盘时,hbase仍然可以一直处理写操作。这使得hbase的写入速度非常的快。如果写磁盘的峰值高到memstore跟不上。那么写操作填满memStore就会不断提高。memStore的内存占用也会不断升高。memStore达到一定阈值,更新又会被阻塞,并且进行强制写入磁盘。
所以要调整memStore总体内存的大小避免发生更新阻塞
1、hbase.regionserver.global.memstore.upperLimit
        hbase.regionserver.global.memstore.upperLimit:默认值0.4超过该值后,新的更新就会被阻塞,并且强制进行写盘。这是一项可以防止hbase在写高峰时耗尽内存的配置信息,默认0.4意味着占用服务器堆内存的40%。
        该默认值在很多情况下都可以很好的发生作用,但是如果服务器日志中出现许多含有Flush of region xxx due to global heap pressure的日志,那么就需要调整该属性。不建议太大,可配置为0.45。因为block cache和memstore cache的总大小不会超过0.8,而且不建议这两个cache的大小总和达到或者接近0.8,避免OOM。
2、hbase.regionserver.global.memstore.lowerLimit
        hbase.regionserver.global.memstore.lowerLimit:默认值0.35。它指定了何时对memStore进行强制写磁盘,系统会一直进行写盘,直到memStore所占用的总内存大小低于该属性的值为止。默认0.35意味着服务器堆大小的35%。



0 个回复

您需要登录后才可以回帖 登录 | 加入黑马