Hbase参数优化指南

@波多野结衣

《Hbase参数优化指南》 图片.png

1、datanode的最大文件数

vi $HADOOP_HOME/conf/hdfs-site.xml

<property>

<name>dfs.datanode.max.xcievers</name>

<value>8192</value>

</property>

2、解决“打开文件过多”错误(修改的时候要视机器内存而定,ubuntu1210默认为1024,ulimit -n)

vi /etc/security/limits.conf

hadoop soft nofile 65535

hadoop hard nofile 65535

vi /etc/pam.d/login

session required pam_limits.so

3、解决“无法创建新的本地线程”错误(修改的时候要视机器内存而定,ubuntu1210默认为31916,ulimit -u)

vi /etc/security/limits.conf

hadoop soft nproc 32000

hadoop hard nproc 32000

vi /etc/pam.d/login

session required pam_limits.so

4、vi $HBASE_HOME/conf/hbase-site.xml

<property>

<name>zookeeper.session.timeout</name>

<value>120000</value>

</property>

5、修改内存交换的频率

root# sysctl -w vm.swappiness=0(重启后失效)

永久修改

root# echo “vm.smappiness = 0” >> /etc/sysctil.conf

0是不交换,可以改成10,100是最高值。

6、调整HBASE_HEAPSIZE大小和JVM参数主要是针对GC(好像!hbase_heapsize的大小在32位机器中限制了?)

vi $HBASE_HOME/conf/hbase-env.sh

export HBASE_HEAPSIZE=**4000**

export HBASE_OPTS="$HBASE_OPTS -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -Xloggc:$HBASE_LOG_DIR/gc-hbase.log -XX:CMSInitaltingOccupancyFraction=70"

export HBASE_REGIONSERVER_OPTS="$HBASE_REGIONSERVER_OPTS -Xmx1500m -Xms1500m -XX:+UseParNewGC -XX:NewSize=100m -XX:MaxNewSize=100m -XX:ParallelGCThreads=4"

7、禁止自动调用主合并

vi $HBASE_HOME/conf/hbase-site.xml

<property>

<name>hbase.hregion.majorcompaction</name>

<value>0</value>

或者(7天) <value>604800000</value>

<description>主合并自动启动的时间,但主合并自动启动还有其他很多因素决定</description>

</property>

<property>

<name>hbase.hregion.majorcompaction.jitter</name>

<value>0.5</value>

<description>每个regionserver的majorcompaction之间的间隔,数值越少,间隔越短</description>

</property>

<property>

<name>hbase.hregion.max.filesize</name>

<value>128*****10241024*</value>

<description>region split触发的最低阀值,也就是小于value时一定不会split,看情况而定,但建议不要太小</description>

</property>

<property>

<name>hbase.regionserver.handler.count</name>

<value>20</value>

<description>region split触发的最低阀值,也就是小于value时一定不会split,看情况而定,但建议不要太小</description>

</property>

8、避免更新阻塞

vi $HBASE_HOME/conf/hbase-site.xml

<property>

<name>hbase.hregion.memstore.block.multiplier</name>

<value>8</value>

<description>为了防止合并/分割的时间过长而倒置内存耗尽,在某一Region的MemStore的大小达到一定阀值时,HBase会对更新进行阻塞。该阀值的定义是:hbase.hregion.memstore.flush.size * hbase.hregion.memstore.block.multiplier,对于写密集集群,阀值的默认值是128m*2,会使得阻塞经常出现,但调高也有可能增大写盘是出现合并/分割的可能性</description>

</property>

<property>

<name>hbase.hstore.blockingStoreFiles</name>

<value>20</value>

<description>任何一个Store的StoreFiles数超过了上述的值(默认为7),那么该区域的更新就会被阻塞,直到合并完成或超过hbase.hstore.blockingWaitingTime(默认为90秒)所指定的时间为止。加大后副作用:每次合并会合并更多的文件,也就是合并次数少了,但一次合并的耗时就大了</description>

</property>

9、调节MemStore内存大小

调高下面两个值有助于减少更新因MemStore大小限制而被阻塞的机会,并保证MemStore和块缓存加在一起消耗最多70%的RegionServer的堆空间

vi $HBASE_HOME/conf/hbase-site.xml

<property>

<name>hbase.regionserver.global.memstore.upperLimit</name>

<value>0.55</value>

<description>控制一台RegionServer中所有MemStore的总大小的最大值,超过该值后,新的更新会被阻塞,并且强行写盘</description>

</property>

<property>

<name>hbase.regionserver.global.memstore.lowerLimit</name>

<value>0.45</value>

<description>系统一直写盘,直到MemStore所占用的总内存大小低于该属性的值为止</description>

</property>

<property>

<name>hbase.block.cache.size</name>

<value>0.15</value>

<description>RegionServer堆空间最大值的百分之多少分配给块缓存,写密集则少,读密集则应该大</description>

</property>

hbase.tmp.dir

  • 本地文件系统tmp目录,一般配置成local模式的设置一下,但是最好还是需要设置一下,因为很多文件都会默认设置成它下面的
  • 线上配置

<property>
    <name>hbase.tmp.dir</name>
    <value>/mnt/dfs/11/hbase/hbase-tmp</value>
</property>

  • 默认值:
${java.io.tmpdir}/hbase-${user.name}

写到系统的/tmp目录

hbase.rootdir

<property>
     <name>hbase.rootdir</name>
     <value>hdfs://mycluster/hbase</value>
</property>
  • 默认值:
{hbase.tmp.dir}/hbase

hbase.cluster.distributed

  • 集群的模式,分布式还是单机模式,如果设置成false的话,HBase进程和Zookeeper进程在同一个JVM进程。
  • 线上配置为true
  • 默认值:false

hbase.zookeeper.quorum

  • zookeeper集群的URL配置,多个host中间用逗号(,)分割
  • 线上配置
<property>
<name>hbase.zookeeper.quorum</name>   <value>inspurXXX.xxx.xxx.org,inspurXXX.xxx.xxx.org,inspurXXX.xxx.xxx.org,inspurXXX.xxx.xxx.org,inspurXXX.xxx.xxx.org</value>
</property>

  • 默认值:localhost

hbase.zookeeper.property.dataDir

  • ZooKeeper的zoo.conf中的配置。 快照的存储位置
  • 线上配置:/home/hadoop/zookeeperData
  • 默认值:${hbase.tmp.dir}/zookeeper

zookeeper.session.timeout

  • 客户端与zk连接超时时间
  • 线上配置:1200000(20min)
  • 默认值:180000(3min)

hbase.zookeeper.property.tickTime

  • Client端与zk发送心跳的时间间隔
  • 线上配置:6000(6s)
  • 默认值:6000

hbase.security.authentication

  • HBase集群安全认证机制,目前的版本只支持kerberos安全认证。
  • 线上配置:kerberos
  • 默认值:空

hbase.security.authorization

  • HBase是否开启安全授权机制
  • 线上配置: true
  • 默认值: false

hbase.regionserver.kerberos.principal

  • regionserver的kerberos认证的主体名称(由三部分组成:服务或用户名称、实例名称以及域名)
  • 线上配置:hbase/_HOST@HADOOP.xxx.xxx.COM
  • 默认:无

hbase.regionserver.keytab.file

  • regionserver keytab文件路径
  • 线上配置:/home/hadoop/etc/conf/hbase.keytab
  • 默认值:无

hbase.master.kerberos.principal

  • master的kerberos认证的主体名称(由三部分组成:服务或用户名称、实例名称以及域名)
  • 线上配置:hbase/_HOST@HADOOP.xxx.xxx.COM
  • 默认:无

hbase.master.keytab.file

  • master keytab文件路径
  • 线上配置:/home/hadoop/etc/conf/hbase.keytab
  • 默认值:无

hbase.regionserver.handler.count

  • regionserver处理IO请求的线程数
  • 线上配置:50
  • 默认配置:10

hbase.regionserver.global.memstore.upperLimit

  • RegionServer进程block进行flush触发条件:该节点上所有region的memstore之和达到upperLimit*heapsize
  • 线上配置:0.45
  • 默认配置:0.4

hbase.regionserver.global.memstore.lowerLimit

  • RegionServer进程触发flush的一个条件:该节点上所有region的memstore之和达到lowerLimit*heapsize
  • 线上配置:0.4
  • 默认配置:0.35

hbase.client.write.buffer

  • 客户端写buffer,设置autoFlush为false时,当客户端写满buffer才flush
  • 线上配置:8388608(8M)
  • 默认配置:2097152(2M)

hbase.hregion.max.filesize

  • 单个ColumnFamily的region大小,若按照ConstantSizeRegionSplitPolicy策略,超过设置的该值则自动split
  • 线上配置:107374182400(100G)
  • 默认配置:21474836480(20G)

hbase.hregion.memstore.block.multiplier

  • 超过memstore大小的倍数达到该值则block所有写入请求,自我保护
  • 线上配置:8(内存够大可以适当调大一些,出现这种情况需要客户端做调整)
  • 默认配置:2

hbase.hregion.memstore.flush.size

  • memstore大小,当达到该值则会flush到外存设备
  • 线上配置:104857600(100M)
  • 默认值: 134217728(128M)

hbase.hregion.memstore.mslab.enabled

  • 是否开启mslab方案,减少因内存碎片导致的Full GC,提高整体性能
  • 线上配置:true
  • 默认配置: true

hbase.regionserver.maxlogs

  • regionserver的hlog数量
  • 线上配置:128
  • 默认配置:32

hbase.regionserver.hlog.blocksize

  • hlog大小上限,达到该值则block,进行roll掉
  • 线上配置:536870912(512M)
  • 默认配置:hdfs配置的block大小

hbase.hstore.compaction.min

  • 进入minor compact队列的storefiles最小个数
  • 线上配置:10
  • 默认配置:3

hbase.hstore.compaction.max

  • 单次minor compact最多的文件个数
  • 线上配置:30
  • 默认配置:10

hbase.hstore.blockingStoreFiles

  • 当某一个region的storefile个数达到该值则block写入,等待compact
  • 线上配置:100(生产环境可以设置得很大)
  • 默认配置: 7

hbase.hstore.blockingWaitTime

  • block的等待时间
  • 线上配置:90000(90s)
  • 默认配置:90000(90s)

hbase.hregion.majorcompaction

  • 触发major compact的周期
  • 线上配置:0(关掉major compact)
  • 默认配置:86400000(1d)

hbase.regionserver.thread.compaction.large

  • large compact线程池的线程个数
  • 线上配置:5
  • 默认配置:1

hbase.regionserver.thread.compaction.small

  • small compact线程池的线程个数
  • 线上配置:5
  • 默认配置:1

hbase.regionserver.thread.compaction.throttle

  • compact(major和minor)请求进入large和small compact线程池的临界点
  • 线上配置:10737418240(10G)
  • 默认配置:2 * this.minFilesToCompact * this.region.memstoreFlushSize

hbase.hstore.compaction.max.size

  • minor compact队列中storefile文件最大size
  • 线上配置:21474836480(20G)
  • 默认配置:Long.MAX_VALUE

hbase.rpc.timeout

  • RPC请求timeout时间
  • 线上配置:300000(5min)
  • 默认配置:60000(10s)

hbase.regionserver.region.split.policy

  • split操作默认的策略
  • 线上配置: org.apache.hadoop.hbase.regionserver.ConstantSizeRegionSplitPolicy(采取老的策略,自己控制split)
  • 默认配置: org.apache.hadoop.hbase.regionserver.IncreasingToUpperBoundRegionSplitPolicy(在region没有达到maxFileSize的前提下,如果fileSize达到regionCount * regionCount * flushSize则进行split操作)

hbase.regionserver.regionSplitLimit

  • 单台RegionServer上region数上限
  • 线上配置:150
  • 默认配置:2147483647

hbase-env.sh配置

指定系统运行环境


export JAVA_HOME=/usr/lib/jvm/java-6-sun/ #JDK HOME
export HBASE_HOME=/home/hadoop/cdh4/hbase-0.94.2-cdh4.2.1 # HBase 安装目录
export HBASE_LOG_DIR=/mnt/dfs/11/hbase/hbase-logs #日志输出路径

JVM参数调优

export HBASE_OPTS="-verbose:gc -XX:+PrintGCDetails -Xloggc:${HBASE_LOG_DIR}/hbase-gc.log -XX:+PrintGCTimeStamps -XX:+PrintGCApplicationConcurrentTime -XX:+PrintGCApplicationStoppedTime \
-server -Xmx20480m -Xms20480m -Xmn10240m -Xss256k  -XX:SurvivorRatio=4 -XX:MaxPermSize=256m -XX:MaxTenuringThreshold=15 \
-XX:ParallelGCThreads=16 -XX:+UseConcMarkSweepGC -XX:+UseParNewGC  -XX:CMSFullGCsBeforeCompaction=5 -XX:+UseCMSCompactAtFullCollection \
-XX:+CMSClassUnloadingEnabled  -XX:CMSInitiatingOccupancyFraction=70 -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSMaxAbortablePrecleanTime=5000     \
"

点赞

发表评论

电子邮件地址不会被公开。 必填项已用*标注