HBase主要参数配置及说明

Posted IT技术航母

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HBase主要参数配置及说明相关的知识,希望对你有一定的参考价值。

hbase-site.xml配置

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

  • HBase集群中所有RegionServer共享目录,用来持久化HBase的数据,一般设置的是hdfs的文件目录,如hdfs://namenode.example.org:9000/hbase

  • 线上配置

    <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 #日志输出路径

  • hbase.rootdir

  • 这个目录是region server的共享目录,用来持久化HBase。URL需要是'完全正确'的,还要包含文件系统的scheme。例如,要表示hdfs中的'/hbase'目录,namenode 运行在namenode.example.org的9090端口。则需要设置为hdfs://namenode.example.org:9000/hbase。默认情况下HBase是写到/tmp的。不改这个配置,数据会在重启的时候丢失。

    默认: file:///tmp/hbase-${user.name}/hbase

  • hbase.master.port

  • HBase的Master的端口.

    默认: 60000

  • hbase.cluster.distributed

  • HBase的运行模式。false是单机模式,true是分布式模式。若为false,HBase和Zookeeper会运行在同一个JVM里面。

    默认: false

  • hbase.master.info.port

  • HBase Master web 界面端口. 设置为-1 意味着你不想让他运行。

    默认: 60010

  • hbase.master.info.bindAddress

  • HBase Master web 界面绑定的端口

    默认: 0.0.0.0

  • hbase.client.write.buffer

  • HTable客户端的写缓冲的默认大小。这个值越大,需要消耗的内存越大。因为缓冲在客户端和服务端都有实例,所以需要消耗客户端和服务端两个地方的内存。得到的好处是,可以减少RPC的次数。可以这样估算服务器端被占用的内存: hbase.client.write.buffer * hbase.regionserver.handler.count

    默认: 2097152

  • hbase.regionserver.port

  • HBase RegionServer绑定的端口

    默认: 60020

  • hbase.regionserver.info.port

  • HBase RegionServer web 界面绑定的端口 设置为 -1 意味这你不想与运行 RegionServer 界面.

    默认: 60030

  • hbase.regionserver.info.port.auto

  • Master或RegionServer是否要动态搜一个可以用的端口来绑定界面。当hbase.regionserver.info.port已经被占用的时候,可以搜一个空闲的端口绑定。这个功能在测试的时候很有用。默认关闭。

    默认: false

  • hbase.regionserver.info.bindAddress

  • 默认: 0.0.0.0

  • hbase.regionserver.class

  • RegionServer 使用的接口。客户端打开代理来连接region server的时候会使用到。

    默认: org.apache.hadoop.hbase.ipc.HRegionInterface

  • hbase.client.pause

  • 通常的客户端暂停时间。最多的用法是客户端在重试前的等待时间。比如失败的get操作和region查询操作等都很可能用到。

    默认: 1000

  • hbase.client.retries.number

  • 最大重试次数。例如 region查询,Get操作,Update操作等等都可能发生错误,需要重试。这是最大重试错误的值。

    默认: 10

  • hbase.client.scanner.caching

  • 当调用Scanner的next方法,而值又不在缓存里的时候,从服务端一次获取的行数。越大的值意味着Scanner会快一些,但是会占用更多的内存。当缓冲被占满的时候,next方法调用会越来越慢。慢到一定程度,可能会导致超时。例如超过了hbase.regionserver.lease.period。

    默认: 1

  • hbase.client.keyvalue.maxsize

  • 一个KeyValue实例的最大size.这个是用来设置存储文件中的单个entry的大小上界。因为一个KeyValue是不能分割的,所以可以避免因为数据过大导致region不可分割。明智的做法是把它设为可以被最大region size整除的数。如果设置为0或者更小,就会禁用这个检查。默认10MB。

    默认: 10485760

  • hbase.regionserver.lease.period

  • 客户端租用HRegion server 期限,即超时阀值。单位是毫秒。默认情况下,客户端必须在这个时间内发一条信息,否则视为死掉。

    默认: 60000

  • hbase.regionserver.handler.count

  • RegionServers受理的RPC Server实例数量。对于Master来说,这个属性是Master受理的handler数量

    默认: 10

  • hbase.regionserver.msginterval

  • RegionServer 发消息给 Master 时间间隔,单位是毫秒

    默认: 3000

  • hbase.regionserver.optionallogflushinterval

  • 将Hlog同步到HDFS的间隔。如果Hlog没有积累到一定的数量,到了时间,也会触发同步。默认是1秒,单位毫秒。

    默认: 1000

  • hbase.regionserver.regionSplitLimit

  • region的数量到了这个值后就不会在分裂了。这不是一个region数量的硬性限制。但是起到了一定指导性的作用,到了这个值就该停止分裂了。默认是MAX_INT.就是说不阻止分裂。

    默认: 2147483647

  • hbase.regionserver.logroll.period

  • 提交commit log的间隔,不管有没有写足够的值。

    默认: 3600000

  • hbase.regionserver.hlog.reader.impl

  • HLog file reader 的实现.

    默认: org.apache.hadoop.hbase.regionserver.wal.SequenceFileLogReader

  • hbase.regionserver.hlog.writer.impl

  • HLog file writer 的实现.

    默认: org.apache.hadoop.hbase.regionserver.wal.SequenceFileLogWriter

  • hbase.regionserver.thread.splitcompactcheckfrequency

  • region server 多久执行一次split/compaction 检查.

    默认: 20000

  • hbase.regionserver.nbreservationblocks

  • 储备的内存block的数量(译者注:就像石油储备一样)。当发生out of memory 异常的时候,我们可以用这些内存在RegionServer停止之前做清理操作。

    默认: 4

  • hbase.zookeeper.dns.interface

  • 默认: default

  • hbase.zookeeper.dns.nameserver

  • 默认: default

  • hbase.regionserver.dns.interface

  • 默认: default

  • hbase.regionserver.dns.nameserver

  • 默认: default

  • hbase.master.dns.interface

  • 默认: default

  • hbase.master.dns.nameserver

  • 默认: default

  • hbase.balancer.period

  • Master执行region balancer的间隔。

    默认: 300000

  • hbase.regions.slop

  • 当任一regionserver有average + (average * slop)个region是会执行Rebalance

    默认: 0

  • hbase.master.logcleaner.ttl

  • Hlog存在于.oldlogdir 文件夹的最长时间, 超过了就会被 Master 的线程清理掉.

    默认: 600000

  • hbase.master.logcleaner.plugins

  • LogsCleaner服务会执行的一组LogCleanerDelegat。值用逗号间隔的文本表示。这些WAL/HLog cleaners会按顺序调用。可以把先调用的放在前面。你可以实现自己的LogCleanerDelegat,加到Classpath下,然后在这里写下类的全称。一般都是加在默认值的前面。

    默认: org.apache.hadoop.hbase.master.TimeToLiveLogCleaner

  • hbase.regionserver.global.memstore.upperLimit

  • 单个region server的全部memtores的最大值。超过这个值,一个新的update操作会被挂起,强制执行flush操作。

    默认: 0.4

  • hbase.regionserver.global.memstore.lowerLimit

  • 当强制执行flush操作的时候,当低于这个值的时候,flush会停止。默认是堆大小的 35% . 如果这个值和 hbase.regionserver.global.memstore.upperLimit 相同就意味着当update操作因为内存限制被挂起时,会尽量少的执行flush(译者注:一旦执行flush,值就会比下限要低,不再执行)

    默认: 0.35

  • hbase.server.thread.wakefrequency

  • service工作的sleep间隔,单位毫秒。 可以作为service线程的sleep间隔,比如log roller.

    默认: 10000

  • hbase.hregion.memstore.flush.size

  • 当memstore的大小超过这个值的时候,会flush到磁盘。这个值被一个线程每隔hbase.server.thread.wakefrequency检查一下。

    默认: 67108864

  • hbase.hregion.preclose.flush.size

  • 当一个region中的memstore的大小大于这个值的时候,我们又触发了close.会先运行“pre-flush”操作,清理这个需要关闭的memstore,然后将这个region下线。当一个region下线了,我们无法再进行任何写操作。如果一个memstore很大的时候,flush操作会消耗很多时间。"pre-flush"操作意味着在region下线之前,会先把memstore清空。这样在最终执行close操作的时候,flush操作会很快。

    默认: 5242880

  • hbase.hregion.memstore.block.multiplier

  • 如果memstore有hbase.hregion.memstore.block.multiplier倍数的hbase.hregion.flush.size的大小,就会阻塞update操作。这是为了预防在update高峰期会导致的失控。如果不设上界,flush的时候会花很长的时间来合并或者分割,最坏的情况就是引发out of memory异常。(译者注:内存操作的速度和磁盘不匹配,需要等一等。原文似乎有误)

    默认: 2

  • hbase.hregion.memstore.mslab.enabled

  • 体验特性:启用memStore分配本地缓冲区。这个特性是为了防止在大量写负载的时候堆的碎片过多。这可以减少GC操作的频率。(GC有可能会Stop the world)(译者注:实现的原理相当于预分配内存,而不是每一个值都要从堆里分配)

    默认: false

  • hbase.hregion.max.filesize

  • 最大HStoreFile大小。若某个Column families的HStoreFile增长达到这个值,这个Hegion会被切割成两个。 Default: 256M.

    默认: 268435456

  • hbase.hstore.compactionThreshold

  • 当一个HStore含有多于这个值的HStoreFiles(每一个memstore flush产生一个HStoreFile)的时候,会执行一个合并操作,把这HStoreFiles写成一个。这个值越大,需要合并的时间就越长。

    默认: 3

  • hbase.hstore.blockingStoreFiles

  • 当一个HStore含有多于这个值的HStoreFiles(每一个memstore flush产生一个HStoreFile)的时候,会执行一个合并操作,update会阻塞直到合并完成,直到超过了hbase.hstore.blockingWaitTime的值

    默认: 7

  • hbase.hstore.blockingWaitTime

  • hbase.hstore.blockingStoreFiles所限制的StoreFile数量会导致update阻塞,这个时间是来限制阻塞时间的。当超过了这个时间,HRegion会停止阻塞update操作,不过合并还有没有完成。默认为90s.

    默认: 90000

  • hbase.hstore.compaction.max

  • 每个“小”合并的HStoreFiles最大数量。

    默认: 10

  • hbase.hregion.majorcompaction

  • 一个Region中的所有HStoreFile的major compactions的时间间隔。默认是1天。 设置为0就是禁用这个功能。

    默认: 86400000

  • hbase.mapreduce.hfileoutputformat.blocksize

  • MapReduce中HFileOutputFormat可以写 storefiles/hfiles. 这个值是hfile的blocksize的最小值。通常在HBase写Hfile的时候,bloocksize是由table schema(HColumnDescriptor)决定的,但是在mapreduce写的时候,我们无法获取schema中blocksize。这个值越小,你的索引就越大,你随机访问需要获取的数据就越小。如果你的cell都很小,而且你需要更快的随机访问,可以把这个值调低。

    默认: 65536

  • hfile.block.cache.size

  • 分配给HFile/StoreFile的block cache占最大堆(-Xmx setting)的比例。默认是20%,设置为0就是不分配。

    默认: 0.2

  • hbase.hash.type

  • 哈希函数使用的哈希算法。可以选择两个值:: murmur (MurmurHash) 和 jenkins (JenkinsHash). 这个哈希是给 bloom filters用的.

    默认: murmur

  • hbase.master.keytab.file

  • HMaster server验证登录使用的kerberos keytab 文件路径。(译者注:HBase使用Kerberos实现安全)

    默认:

  • hbase.master.kerberos.principal

  • 例如. "hbase/_HOST@EXAMPLE.COM". HMaster运行需要使用 kerberos principal name. principal name 可以在: user/hostname@DOMAIN 中获取. 如果 "_HOST" 被用做hostname portion,需要使用实际运行的hostname来替代它。

    默认:

  • hbase.regionserver.keytab.file

  • HRegionServer验证登录使用的kerberos keytab 文件路径。

    默认:

  • hbase.regionserver.kerberos.principal

  • 例如. "hbase/_HOST@EXAMPLE.COM". HRegionServer运行需要使用 kerberos principal name. principal name 可以在: user/hostname@DOMAIN 中获取. 如果 "_HOST" 被用做hostname portion,需要使用实际运行的hostname来替代它。在这个文件中必须要有一个entry来描述 hbase.regionserver.keytab.file

    默认:

  • zookeeper.session.timeout

  • ZooKeeper 会话超时.HBase把这个值传递改zk集群,向他推荐一个会话的最大超时时间。详见http://hadoop.apache.org/zookeeper/docs/current/zookeeperProgrammers.html#ch_zkSessions "The client sends a requested timeout, the server responds with the timeout that it can give the client. "。 单位是毫秒

    默认: 180000

  • zookeeper.znode.parent

  • ZooKeeper中的HBase的根ZNode。所有的HBase的ZooKeeper会用这个目录配置相对路径。默认情况下,所有的HBase的ZooKeeper文件路径是用相对路径,所以他们会都去这个目录下面。

    默认: /hbase

  • zookeeper.znode.rootserver

  • 默认: root-region-server

  • hbase.zookeeper.quorum

  • 默认: localhost

  • hbase.zookeeper.peerport

  • ZooKeeper节点使用的端口。详细参见:http://hadoop.apache.org/zookeeper/docs/r3.1.1/zookeeperStarted.html#sc_RunningReplicatedZooKeeper

    默认: 2888

  • hbase.zookeeper.leaderport

  • ZooKeeper用来选择Leader的端口,详细参见:http://hadoop.apache.org/zookeeper/docs/r3.1.1/zookeeperStarted.html#sc_RunningReplicatedZooKeeper

    默认: 3888

  • hbase.zookeeper.property.initLimit

  • ZooKeeper的zoo.conf中的配置。 初始化synchronization阶段的ticks数量限制

    默认: 10

  • hbase.zookeeper.property.syncLimit

  • ZooKeeper的zoo.conf中的配置。 发送一个请求到获得承认之间的ticks的数量限制

    默认: 5

  • hbase.zookeeper.property.dataDir

  • ZooKeeper的zoo.conf中的配置。 快照的存储位置

    默认: ${hbase.tmp.dir}/zookeeper

  • hbase.zookeeper.property.clientPort

  • ZooKeeper的zoo.conf中的配置。 客户端连接的端口

    默认: 2181

  • hbase.zookeeper.property.maxClientCnxns

  • ZooKeeper的zoo.conf中的配置。 ZooKeeper集群中的单个节点接受的单个Client(以IP区分)的请求的并发数。这个值可以调高一点,防止在单机和伪分布式模式中出问题。

    默认: 2000

  • hbase.rest.port

  • HBase REST server的端口

    默认: 8080

  • hbase.rest.readonly

  • 定义REST server的运行模式。可以设置成如下的值: false: 所有的HTTP请求都是被允许的 - GET/PUT/POST/DELETE. true:只有GET请求是被允许的

    默认: false

 


以上是关于HBase主要参数配置及说明的主要内容,如果未能解决你的问题,请参考以下文章

HBase参数配置及说明

HBASE研究及优化-上篇:HBASE基本模块及优化

HBase写入性能改造(续)--MemStoreflushcompact参数调优及压缩卡的使用

hbase参数配置优化

HBase客户端访问超时原因及参数优化

HBase客户端访问超时的多个因素及参数