HBase 常见重要配置参数
(1) Hbase.rpc.timeout
rpc 的超时时间,默认 60s,不建议修改,避免影响正常的业务,在线上环境刚开始配置的是 3 秒,运行半天后发现了大量的 timeout error,缘由是有一个 region 出现了以下问题阻塞了写操做:“Blocking updates … memstore size 434.3m is >= than blocking 256.0m size”可见不能过低node
(2) ipc.socket.timeout:socket 创建连接的超时时间,应该小于或者等于 rpc 的超时时间,默认为 20sweb
(3) hbase.client.retries.number:重试次数,默认为 10,可配置为 3算法
(4) hbase.client.pause:重试的休眠时间,默认为 1s,可减小,好比 100msapache
(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.dirsession
- 本地文件系统的临时文件夹。能够修改到一个更为持久的目录上。(/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 或者更小,就会禁用这个检查。默认 10MB
- 默认: 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