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