(1) Hbase.rpc.timeout
rpc 的超时时间,默认 60s,不建议修改,避免影响正常的业务,在线上环境刚开始配置的是 3 秒,运行半天后发现了大量的 timeout error,原因是有一个 region 出现了如下问题阻塞了写操作:“Blocking updates … memstore size 434.3m is >= than blocking 256.0m size”可见不能太低

(2) ipc.socket.timeout:socket 建立链接的超时时间,应该小于或者等于 rpc 的超时时间,默认为 20s

(3) hbase.client.retries.number:重试次数,默认为 10,可配置为 3

(4) hbase.client.pause:重试的休眠时间,默认为 1s,可减少,比如 100ms

(5) hbase.regionserver.lease.period:scan 查询时每次与 server 交互的超时时间,默认为 60s,可不调整

HBase 默认配置参数

序号

参数名

作用

默认取值

1

hbase.rootdir

这个目录是 RegionServer 的共享目录,用来持久化 HBase。URL 需要是 “完全正确” 的,还要包含文件系统的 scheme。 例如 “/hbase” 表示 HBase 在 HDFS 中占用的实际存储位置,HDFS 的 NameNode 运行在主机名为 master5 的 8020 端口,则 hbase.rootdir 的设置应为 “hdfs://master5:8020/hbase”。在默认情况下 HBase 是写在 /tmp 中的。不修改这个配置的话,数据会在重启的时候丢失。特别注意的是 hbase.rootdir 里面的 HDFS 地址是要跟 Hadoop 的 core-site.xml 里面的 fs.defaultFS 的 HDFS 的 IP 地址或者域名、端口必须一致。

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

2

hbase.cluster.distributed

HBase 的运行模式。为 false 表示单机模式,为 true 表示分布式模式。若为 false,HBase 和 ZooKeeper 会运行在同一个 JVM 中

false

3

hbase.master (hbase.master.port)

  • 如果只设置单个 Hmaster,那么 hbase.master 属性参数需要设置为 master5:60000 (主机名:60000)
  • 如果要设置多个 Hmaster,那么我们只需要提供端口 60000,因为选择真正的 master 的事情会有 zookeeper 去处理

60000

4

hbase.tmp.dir

本地文件系统的临时文件夹。可以修改到一个更为持久的目录上。(/tmp会在重启时清除)

/tmp/hbase-${user.name}

5

hbase.master.info.port

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

60010

6

hbase.master.info.bindAddress

HBase Master web 界面绑定的端口

0.0.0.0

7

hbase.client.write.buffer

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

2097152 (2G)

8

hbase.regionserver.port

HBase RegionServer 绑定的端口

60020

9

hbase.regionserver.info.port

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

60030

10

hbase.regionserver.info.port.auto

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

false

11

hbase.regionserver.info.bindAddress

HBase RegionServer web 界面的IP地址

0.0.0.0

12

hbase.regionserver.class

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

org.apache.hadoop.hbase.ipc.HRegionInterface

13

hbase.client.pause

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

1000 ms

14

hbase.client.retries.number

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

10

15

hbase.client.scanner.caching

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

1

16

hbase.client.keyvalue.maxsize

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

10485760 (10MB)

17

hbase.regionserver.lease.period

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

60000

18

hbase.regionserver.handler.count

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

10

19

hbase.regionserver.msginterval

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

3000

20

hbase.regionserver.optionallogflushinterval

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

1000

21

hbase.regionserver.regionSplitLimit

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

2147483647 (1G)

22

hbase.regionserver.logroll.period

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

3600000

23

hbase.regionserver.hlog.reader.impl

HLog file reader 的实现

org.apache.hadoop.hbase.regionserver.wal.SequenceFileLogReader

24

hbase.regionserver.hlog.writer.impl

HLog file writer 的实现

org.apache.hadoop.hbase.regionserver.wal.SequenceFileLogWriter

25

hbase.regionserver.thread.splitcompactcheckfrequency

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

20000

26

hbase.regionserver.nbreservationblocks

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

4

27

hbase.zookeeper.dns.interface

当使用 DNS 的时候,Zookeeper 用来上报的 IP 地址的网络接口名字

default

28

hbase.zookeeper.dns.nameserver

当使用 DNS 的时候,Zookeepr 使用的 DNS 的域名或者 IP 地址,Zookeeper 用它来确定和 master 用来进行通讯的域名

default

29

hbase.regionserver.dns.interface

当使用 DNS 的时候,RegionServer 用来上报的 IP 地址的网络接口名字

default

30

hbase.regionserver.dns.nameserver

当使用 DNS 的时候,RegionServer 使用的 DNS 的域名或者 IP 地址,RegionServer 用它来确定和 master 用来进行通讯的域名

default

31

hbase.master.dns.interface

当使用 DNS 的时候,Master 用来上报的 IP 地址的网络接口名字

default

32

 hbase.master.dns.nameserver

当使用 DNS 的时候,RegionServer 使用的 DNS 的域名或者 IP 地址,Master 用它来确定用来进行通讯的域名

default

33

hbase.balancer.period

Master 执行 region balancer 的间隔

300000

34

hbase.regions.slop

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

0

35

hbase.master.logcleaner.ttl

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

600000

36

hbase.master.logcleaner.plugins

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

org.apache.hadoop.hbase.master.TimeToLiveLogCleaner

37

hbase.regionserver.global.memstore.upperLimit

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

0.4

38

hbase.regionserver.global.memstore.lowerLimit

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

0.35

39

hbase.server.thread.wakefrequency

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

10000

40

hbase.hregion.memstore.flush.size

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

67108864 (64MB)

41

hbase.hregion.preclose.flush.size

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

5242880 (5MB)

42

hbase.hregion.memstore.block.multiplier

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

2

43

hbase.hregion.memstore.mslab.enabled

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

false

44

hbase.hregion.max.filesize

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

268435456 (256M)

45

hbase.hstore.compactionThreshold

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

3

46

hbase.hstore.blockingStoreFiles

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

7

47

hbase.hstore.blockingWaitTime

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

90000

48

hbase.hstore.compaction.max

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

10

49

hbase.hregion.majorcompaction

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

86400000

50

hbase.mapreduce.hfileoutputformat.blocksize

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

65536

51

hfile.block.cache.size

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

0.2

52

hbase.hash.type

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

murmur

53

hbase.master.keytab.file

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

none

54

hbase.master.kerberos.principal

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

none

55

hbase.regionserver.keytab.file

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

none

56

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

none

57

zookeeper.session.timeout

ZooKeeper 会话超时。Hbase 把这个值传递改 zk 集群,向它推荐一个会话的最大超时时间。单位是毫秒

180000

58

zookeeper.znode.parent

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

/hbase

59

zookeeper.znode.rootserver

ZNode 保存的根 region 的路径. 这个值是由 Master 来写,client 和 regionserver 来读的。如果设为一个相对地址,父目录就是 ${zookeeper.znode.parent}。默认情形下,意味着根 region的路径存储在/hbase/root-region- server

root-region-server

60

hbase.zookeeper.quorum

Zookeeper 集群的地址列表,用逗号分割。例如:”host1.mydomain.com,host2.mydomain.com,host3.mydomain.com”.默认是 localhost,是给伪分布式用的。要修改才能在完全分布式的情况下使用。如果在hbase-env.sh设置了HBASE_MANAGES_ZK, 这些ZooKeeper节点就会和Hbase一起启动

localhost

61

hbase.zookeeper.peerport

ZooKeeper节点使用的端口

2888

62

hbase.zookeeper.leaderport

ZooKeeper用来选择Leader的端口

3888

63

hbase.zookeeper.property.initLimit

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

10

64

hbase.zookeeper.property.syncLimit

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

5

65

hbase.zookeeper.property.dataDir

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

${hbase.tmp.dir}/zookeeper

66

hbase.zookeeper.property.clientPort

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

2181

67

hbase.zookeeper.property.maxClientCnxns

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

2000

68

hbase.rest.port

HBase REST server的端口

8080

69

hbase.rest.readonly

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

false

70

hbase.regionserver.restart.on.zk.expire

当 regionserver 遇到 ZooKeeper session expired , regionserver 是否选择 restart

false

注意,即使hbase使用独立的zookeeper(非自带zookeeper),也必须设置:

<property>
     <name>hbase.zookeeper.quorum</name>
     <value>Desktop</value>
 </property><property>
     <name>hbase.zookeeper.property.clientPort</name>
     <value>2181</value>
 </property>

并且每个节点的hbase-site.xml上述内容必须不同,否则会导致HRegionServer启动后过一会儿就自动关闭。