HBase-site.xml 常见重要配置参数(转载)
?
(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) |
| 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啟動后過一會兒就自動關閉。
?
?
Reference:
[1]HBase-site.xml 常見重要配置參數
總結
以上是生活随笔為你收集整理的HBase-site.xml 常见重要配置参数(转载)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: websocket 以及心跳检测实现长连
- 下一篇: ArcGis中地理数据库(sde)中概念