Hbase配置

刘超 6月前 ⋅ 5517 阅读   编辑

   hbase动态配置参数列表


分类
 
参数名
 
参数值 描述
 
 Apache hdp
  hbase.rootdir hdfs://bigdatacluster/apps/hbase/data
    hbase.bulkload.staging.dir /apps/hbase/staging
  hbase.rpc.timeout rpc的超时时间,默认60s,不建议修改,避免影响正常的业务,在线上环境刚开始配置的是3秒,运行半天后发现了大量的timeout error,原因是有一个region出现了如下问题阻塞了写操作:“Blocking updates … memstore size 434.3m is >= than blocking 256.0m size”可见不能太低。
  ipc.socket.timeout socket建立链接的超时时间,应该小于或者等于rpc的超时时间,默认为20s
  hbase.client.retries.number 重试次数,默认为14,可配置为3
  hbase.client.pause 重试的休眠时间,默认为1s,可减少,比如100ms
  hbase.regionserver.lease.period scan查询时每次与server交互的超时时间,默认为60s,可不调整
 

hbase.server.compactchecker.interval.multiplier

 
  index
    hbase.regionserver.wal.codec org.apache.hadoop.hbase.regionserver.wal.IndexedWALEditCodec 不配置该参数,可能报ClassNotException org.apache.hadoop.hbase.regionserver.LocalIndexMerger
    hbase.region.server.rpc.scheduler.factory.class org.apache.hadoop.hbase.ipc.PhoenixRpcSchedulerFactory 不配置该参数,可能报ClassNotException org.apache.hadoop.hbase.regionserver.LocalIndexMerger
    hbase.rpc.controllerfactory.class org.apache.hadoop.hbase.ipc.controller.ServerRpcControllerFactory 不配置该参数,可能报ClassNotException org.apache.hadoop.hbase.regionserver.LocalIndexMerger
   
  client hbase.zookeeper.quorum
    hbase.client.retries.number 35 重试次数
  zookeeper
    hbase.zookeeper.property.maxClientCnxns 增加zk连接数
    zookeeper.recovery.retry 3 重试次数
调优  
Hedged Read特性
    dfs.client.hedged.read.threadpool.size 并发Hedged 读的线程池大小
    dfs.client.hedged.read.threshold.millis 开启一个Hedged 读前的等待时间(毫秒)
  zookeeper zookeeper.session.timeout 60000 提高超时时间,防止zk网络抖动,zookeeper.session.timeout=180000
  memstore

hbase.regionserver.global.memstore.size

40%  

所有region的memstore内存总开销占head的80%,但又分写和读,默认对半分,(1.0 * 80%)/2),所以写默认是40%;,如果超过上限会导致写入被阻塞,直到flush线程把内存里的数据flush下去,否则继续写入memestore会把内存写爆

hbase.regionserver.global.memstore.upperLimit

0.4  

减少该值,对应读多写少场景,hbase.regionserver.global.memstore.upperLimit=0.3

hbase.regionserver.global.memstore.lowerLimit=0.97 #default 0.95    

 

hbase.regionserver.global.memstore.upperLimit=0.4
     
hbase.hregion.memstore.flush.size 128M   达到128M的时候会触发flush memstore,当达到128M * 4还没法触发flush时候会抛异常来拒绝写入
hbase.hregion.memstore.block.multiplier 4   单个Region的memstore占用内存大小超过正常的4倍,会抛异常,写入请求会被拒绝,客户端开始重试请
hstore        
  hbase.hstore.blockingStoreFiles 16    提高写入效率,hbase.hstore.blockingStoreFiles=32
flush        
hbase.hstore.blockingWaitTime 90000 ms 达到hbase.hstore.blockingStoreFiles配置上限时,会导致flush阻塞等到compaction工作完成。阻塞时间是hbase.hstore.blockingWaitTime,hbase.hstore.flusher.count可以根据机器型号去配置,可惜这个数量不会根据写压力去动态调整,配多了,非导入数据多场景也没用,改配置还得重启
hbase.hstore.flusher.count 2
hbase.hstore.blockingStoreFiles 10 10
compaction        
hbase.regionserver.thread.compaction.small 1   增加compaction线程会增加CPU和带宽开销,可能会影响正常的请求。如果不是导入数据,一般而言是够了

hbase.regionserver.thread.compaction.large 1  
hbase.hregion.majorcompaction   7天  

hbase.hstore.compactionThreshold

3   增大该值,减少合并的次数,hbase.hstore.compactionThreshold=15 
hbase.hstore.compaction.max null   增大该值,增加合并文件数,hbase.hstore.compaction.max=35
block hfile.block.cache.size     读多写少场景,hfile.block.cache.size=0.5 
bucketcache hbase.bucketcache.ioengine=offheap null   堆外存储 优化GC,hbase.bucketcache.ioengine=offheap
  hbase.bucketcache.size 18G   增大二级缓存,提高缓存命中率
队列堆积大小        
hbase.ipc.server.max.callqueue.size 1024 * 1024 * 1024   限制队列堆积的大小。当堆积到一定程度后,事实上后面的请求等不到server端处理完,可能客户端先超时了,并且一直堆积下去会导致OOM。当达到queue上限,客户端会收到CallQueueTooBigException 然后自动重试。通过这个可以防止写入过快时候把server端写爆,有一定反压作用
       
client        
hbase.client.keyvalue.maxsize   默认是10MB。超过该大小会报java.lang.IllegalArgumentException: KeyValue size too large。但是不建议设置太大,如果一个keyvalue太大的话,就会出现比较大的block,有可能影响读性能。另外compaction也会消耗比较多的资源。可以考虑使用MOB优化
hbase.client.keyvalue.maxsize
10   针对大消息存储,hbase.client.keyvalue.maxsize=100mb 

 

hbase.regionserver.handler.count 25 用户表级请求的线程数,hbase.regionserver.handler.count=100
HBase Thrift Server      

 

hbase.thrift.minWorkerThreads    

hbase.thrift.minWorkerThreads是thrift server的最小线程数,默认值为16个。hbase.thrift.maxWorkerThreads是thrift server的最大线程数,默认值为1000个。hbase.thrift.maxQueuedRequests是在队列中等待的链接数量,默认值为1000个。

当程序访问HBase Thrift Server时,每当有一个新的连接就会创建一个新的线程,直到线程数量达到最小线程数。当线程池中没有空闲的线程时,新的连接会被加入队列。只有当队列中的等待连接数量超过队列的最大值时,才会为这些等待中的连接创建新的线程,直到线程数量达到最大线程数。当线程数量超过最大线程数时,Thrift Server就会开始丢弃连接

hbase.thrift.maxWorkerThreads    
 hbase.thrift.maxQueuedRequests    
       

 


注意:本文归作者所有,未经作者允许,不得转载

全部评论: 0

    我有话说: