HBase 配置

HBase 配置

hbase-env.sh 配置

1
2
3
4
5
6
7
# hbase-env.sh

# jvm
export HBASE_HEAPSIZE=16G    # 堆内存大小,建议为20~24G,太大会导致GC时间过长,太小会导致频繁的flush

# 开启jvm gc 日志
export SERVER_GC_OPTS="-verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintTenuringDistribution -Xloggc:<FILE-PATH> -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=1 -XX:GCLogFileSize=512M"    

GClog 日志配置

1
2
3
4
5
6
7
8
9
-verbose:gc
-XX:+PrintGCDetails 
-XX:+PrintGCDateStamps 
-XX:+PrintGCApplicationStoppedTime # 打印应用停留时间 
-XX:+PrintTenuringDistribution # 老年代分布 
-Xloggc:<FILE-PATH> #
-XX:+UseGCLogFileRotation 
-XX:NumberOfGCLogFiles=2 
-XX:GCLogFileSize=512M

hbase-site.xml 配置

参数说明默认值建议值
hbase.hstore.blockingStoreFileshflie阻塞客户端请求数10>=64
hbase.hregion.memstore.flush.sizeMemstore 触发 flush操作的大小128M>=256M
hbase.hregion.memstore.block.multiplierMemstore 触发 block 异常的倍数
(当memstore大小到达 memstore_flush_size x multiplier 时, 写请求会被block,引发异常)
44
hbase.hregion.memstore.chunkpool.maxsizememstore0
MSLABhbase.hregion.memstore.mslab.enalbed开启memstore MSLAB内存分配器true
hbase.hregion.memstore.mslab.chunksizememstore lab 中每个 chunk的大小2M
hbase.hregion.memstore.mslab.max.allocation通过MSLAB分配的对象不能超过256K,否则直接在Heap上分配256K
hbase.regionserver.global.memstore.upperLimitregionserver 中 所有memstore占有jvm堆内存的上限比例。
所有memstore超过这个上限,RS会按大到小依次flush memstore,直到小于lowerLimit。
0.45
hbase.regionserver.global.memstore.lowerLimit见上面,一般比upperLimit小0.050.4
hfile.block.cache.sizeblock cache 占jvm 堆内存的比例0.3
hbase.hstore.flusher.countmemstore flush 线程数2>=8
hbase.regionserver.executor.openregion.threads2
hbase.regionserver.executor.closeregion.threads2
hbase.hstore.compaction.maxminor compact 一次可合并的最多 storefile 数10
hbase.hstore.compaction.min触发 minor compact 最少store file个数3
hbase.hstore.compaction.maxminor compact 一次可合并的最多 storefile 数10
hbase.hstore.compaction.min触发 minor compact 最少store file个数3
hbase.regionserver.thread.compaction.largemajor compact 线程数
hbase.regionserver.thread.compaction.smallminor compact 线程数
hbase.regionserver.global.memstore.sizers 中 memstore 占总内存的比例0.4
hbase.regionserver.hlog.blocksizers 中 block size
hbase.hstore.compactionThresholdhbase.hstore.compaction.min的旧值。已被代替3
hbase.hregion.max.filesize

hbase-site.xml 参数说明

zk相关

  • hbase.zookeeper.quorum

    hbase 集群的 zk链接入口。

    默认值:无

    eg:11-3-26-102.LOCAL:2181,11-3-26-104.LOCAL:2181,11-3-26-134.LOCAL:2181

  • zookeeper.znode.parent

    hbase 集群znode节点名称。

    默认:/hbase

    eg:/hbase-hdfs01

fs

  • hbase.rootdir

    hbase 数据存储文件系统root目录,可设置为hdfs文件系统目录(hdfs://xxxx)或分布式fs本地目录(file:///xxxx)

    默认:无

    eg: hdfs://11-3-26-106.LOCAL:9000/hbase01

  • hbase.tmp.dir

    hbase 运行临时目录

    默认:

    eg:/export/Data/hbase/tmp

WAL相关

  • hbase.regionserver.hlog.enabled

    是否启用wal。

    默认:true

    eg:true

  • hbase.regionserver.hlog.blocksize

    Hbase wal文件块大小。

    默认:fs 块大小,hdfs默认为:

    eg:134217728

  • hbase.regionserver.maxlogs

    regionserver上wal的最大个数,超过该个数,会触发memstore flush 操作。可引起写请求的阻塞。

    默认:32

    eg:81

  • hbase.regionserver.hlog.slowsync.ms

    regionserver wal sync 操作缓慢的定义时间。如果wal sync的时间超过该时间,则在日志中记录。

    默认:100ms

    eg:350

  • hbase.regionserver.hlog.splitlog.writer.threads

    Wal split 写入线程数。

    默认:3

  • hbase.regionserver.optionallogflushinterval

    wal log flush 间隔

    默认:1000ms

    已废弃

  • hbase.regionserver.logroll.period

    Wal log roll周期间隔

    默认: 3600000ms (1h)

  • hbase.regionserver.hlog.syncer.count

    hlog sync 线程数。

    默认:5

memstore相关

  • hbase.regionserver.global.memstore.size

    rs中memstore占jvm heap的比例

    默认:0.4

    eg:

  • hbase.regionserver.global.memstore.size.lower.limit

  • hbase.hregion.memstore.flush.size

  • hbase.hregion.memstore.block.multiplier

  • hbase.hregion.memstore.chunkpool.initialsize

  • hbase.hregion.memstore.chunkpool.maxsize

  • hbase.regionserver.optionalcacheflushinterval

    memstore周期flush的时间间隔,0禁止周期flush

    默认:36000000 1h

  • hbase.regionserver.offheap.global.memstore.size

    1
    2
    3
    4
    5
    6
    7
    8
    
    <property>
        <name>hbase.regionserver.offheap.global.memstore.size</name>
        <value>0</value>
        <description>
          The amount of off-heap memory all MemStores in a RegionServer may use.
          A value of 0 means that no off-heap memory will be used.
        </description>  
    </property>
    
  • hbase.hregion.memstore.mslab.enabled

storefile相关

  • hbase.hregion.max.filesize
  • hbase.hstore.blockingStoreFiles
  • hbase.hstore.blockingWaitTime
  • hbase.hstore.flusher.count
  • hbase.regionserver.storefile.refresh.period

compaction相关

  • hbase.hregion.majorcompaction

  • hbase.hstore.compaction.kv.max

  • hbase.regionserver.thread.compaction.small

  • hbase.regionserver.thread.compaction.large

  • hbase.hstore.compaction.max

  • hbase.hstore.compaction.min

  • hbase.hregion.compacting.memstore.type

  • hbase.regionserver.throughput.controller

    org.apache.hadoop.hbase.regionserver.throttle.NoLimitThroughputController

  • hbase.hregion.compacting.memstore.type

  • hbase.hstore.compactionThreshold

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
<property>
    <name>hbase.hregion.compacting.memstore.type</name> 
    <value><none|basic|eager|adaptive></value>
    <description>
Compaction策略
 当一个active segment被flush到pipeline中之后,后台会触发一个任务对pipeline中的数据进行合并。合并任务会对pipeline中所有segment进行scan,将他们的索引合并为一个。有三种合并策略可供选择:Basic,Eager,Adaptive。
 Basic compaction策略和Eager compaction策略的区别在于如何处理cell数据。Basic compaction不会清理多余的数据版本,这样就不需要对cell的内存进行拷贝。而Eager compaction会过滤重复的数据,并清理多余的版本,这意味着会有额外的开销:例如如果使用了MSLAB存储cell数据,就需要把经过清理之后的cell从旧的MSLAB拷贝到新的MSLAB。basic适用于所有写入模式,eager则主要针对数据大量淘汰的场景:例如消息队列、购物车等。
 Adaptive策略则是根据数据的重复情况来决定是否使用Eager策略。在Adaptive策略中,首先会对待合并的segment进行评估,方法是在已经统计过不重复key个数的segment中,找出cell个数最多的一个,然后用这个segment的numUniqueKeys / getCellsCount得到一个比例,如果比例小于设定的阈值,则使用Eager策略,否则使用Basic策略。
 </description></property>

复制

开启压缩

1
2
3
create 'test', {NAME => 'info', VERSIONS => 1, COMPRESSION => 'snappy'}

alter 'test', {NAME=>'info', METHOD=>'delete'}

其他

  • hbase.superuser

    hbase超级用户

    默认:root

    eg: root,admin

  • hbase.meta.versions

  • hbase.regionserver.handler.count

    rpc 线程数

    默认:200

  • hbase.replication

  • hbase.cluster.distributed

    是否启用分布式集群模式

    默认: false

    Eg: true

  • hbase.ipc.server.read.threadpool.size

    Hbase ipc Reader 网络 IO 个数,reader 的个数决定了从网络 io 里读取数据的速度也就是网络吞吐量。

    默认: 10。

rpc

  • hbase.regionserver.handler.count

    handler指的是RegionServer端开启的RPC监听器实例个数,也即RegionServer能够处理的IO请求线程数。

    默认: 30。

  • hbase.ipc.server.callqueue.read.ratio

    假如handler count设置300,那么,读的handler就有 300*0.3=90

  • hbase.ipc.server.callqueue.scan.ratio

    scan的90*0.3=27

使用堆外内存(bucketcache):

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<property>
    <name>hbase.block.data.cachecompressed</name>
    <value>true</value>
</property>
<property>
    <name>hbase.bucketcache.combinedcache.enabled</name>
    <value>true</value>
</property>
<property>
    <name>hbase.bucketcache.ioengine</name>
    <value>offheap</value>
</property>
<property>
    <name>hbase.bucketcache.percentage.in.combinedcache</name>
    <value>0.8984</value>
</property>
<property>
    <name>hbase.bucketcache.size</name>
    <!-- unite MB -->
    <value>8192</value>
</property>
<property>
    <name>hbase.regionserver.global.memstore.size</name>
    <value>0.4</value>
</property>
<property>
    <name>hfile.block.cache.size</name>
    <value>0.4</value>
</property>

compact 限速

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<property>
    <name>hbase.regionserver.throughput.controller</name>
   <value>org.apache.hadoop.hbase.regionserver.compactions.PressureAwareCompactionThroughputController</value>
    <discription>使用压力感知compaction限流策略控制器</discription>
</property>
<property>
    <name>hbase.hstore.compaction.throughput.higher.bound</name>
    <value>209715200</value>
    <discription>限流上限阈值, 默认20MB/s</discription>
</property>
<property>
    <name>hbase.hstore.compaction.throughput.lower.bound</name>
    <value>52428800</value>
    <discription>限流下限阈值, 默认10MB/s</discription>
</property>
<!--
<property>
    <name>hbase.hstore.compaction.throughput.offpeak</name>
    <value>9223372036854775807</value>
    <discription>非高峰期阈值,为Long.MAX即不限流</discription>
</property>
-->
<property>
    <name>hbase.offpeak.start.hour</name>
    <value>0</value>
    <discription>非高峰期开始小时时刻</discription>
</property>
<property>
    <name>hbase.offpeak.end.hour</name>
    <value>3</value>
    <discription>非高峰期结束小时时刻</discription>
</property>
<property>
    <name>hbase.hstore.compaction.throughput.tune.period</name>
    <value>60000</value>
    <discription>限流调整周期,单位毫秒</discription>
</property>

配置动态更新

可动态更新的配置项:http://hbase.apache.org/book.html#dyn_config

1
echo "update_all_cfg" | bin/hbase shell -n

hbase shell

1
2
3
4
$ /export/server/hbase-2.1.0/bin/hbase shell

> processlist         #查看task
> list_procedures    # 查看procedures
updatedupdated2024-08-252024-08-25