1纹安、HBase監(jiān)控指標(biāo)
1.1尤辱、指標(biāo)收集:http://master_ip:port/jmx砂豌;http://regionserver_ip:port/jmx
1.2、HBase核心指標(biāo)
1.2.1光督、通用指標(biāo)
regionCount:? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? RegionServer上Region個數(shù)
storeFileCount:? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? RegionServer上HFile的個數(shù)
storeFileSize:? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? RegionServershang HFile的總大小
hlogFileCount:? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? RegionServer上HLog文件數(shù)量
totalReuqestCount:? ? ? ? ? ? ? ? ? ? ? ? ? ? RegionServer累計(jì)請求數(shù)
readRequestCount:? ? ? ? ? ? ? ? ? ? ? ? ? ? RegionServer累計(jì)讀請求數(shù)
writeRequestCount:? ? ? ? ? ? ? ? ? ? ? ? ? ? RegionServer累計(jì)寫請求數(shù)
munOpenConnections:? ? ? ? ? ? ? ? ? ? ? RegionServer上開啟的RPC連接數(shù)
munActiveHandler:? ? ? ? ? ? ? ? ? ? ? ? ? ? RegionServer上活躍的請求隊(duì)列Handler數(shù)量
flushQueueLength:? ? ? ? ? ? ? ? ? ? ? ? ? ? Region Serve上flush隊(duì)列長度
compactionQueueLength:? ? ? ? ? ? ? ? ? RegionServer上Compaction隊(duì)列長度
GcTimeMillis:? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? RegionServer上當(dāng)前GC時長
GcTimeMillisParNew:? ? ? ? ? ? ? ? ? ? ? ? RegionServer上新生代GC時長
GcTimeMillisConcurrentMarkSweep: RegionServer上老年代GC時長
1.2.2阳距、HBase寫相關(guān)指標(biāo)
memStoreSize:? ? ? ? ? RegionServer上MemStore的總大小
updatesBlockedTime: RegionServer上因文件太多導(dǎo)致更新被阻塞的時間(毫秒)
1.2.3、讀相關(guān)指標(biāo)
blockCacheHitCount:? ? ? ? ? ? ? ? 命中BlockCache的次數(shù)
blockCacheMissCount:? ? ? ? ? ? 未命中BlockCache的次數(shù)
blockCacheExpressHitPercent: BlockCache命中率
percentFileLoacl:? ? ? ? ? ? ? ? ? ? ? RegionServer上數(shù)據(jù)本地率
showGetCount:? ? ? ? ? ? ? ? ? ? ? ? ? RegionServer上slow get的數(shù)量
1.2.4结借、系統(tǒng)硬件相關(guān)指標(biāo)
系統(tǒng)IO筐摘、CPU、網(wǎng)絡(luò)帶寬船老、系統(tǒng)內(nèi)存等
2咖熟、HBase業(yè)務(wù)隔離
HBase集群上業(yè)務(wù)共享的資源主要有隊(duì)列資源、CPU/內(nèi)存資源努隙、IO資源等球恤。
2.1、隊(duì)列資源隔離:RegionServer默認(rèn)提供一個請求隊(duì)列給所有業(yè)務(wù)使用荸镊,這會導(dǎo)致部分延遲較高的請求影響其他對延遲敏感的業(yè)務(wù)咽斧,HBase并沒有提供業(yè)務(wù)級別的隊(duì)列設(shè)置功能,而是提供了讀寫隊(duì)列隔離的方案躬存≌湃牵總共有三個隊(duì)列: 寫隊(duì)列、get隊(duì)列岭洲、scan隊(duì)列
2.2宛逗、CPU/內(nèi)存資源隔離:計(jì)算資源隔離的主流方案有Docker容器、yarn容器等盾剩,結(jié)合HBase使用場景雷激,實(shí)現(xiàn)業(yè)務(wù)之間計(jì)算資源隔離還需要讓不同業(yè)務(wù)運(yùn)行在不同容器上,HBase提供了RSGroup方案告私,用戶可以將集群劃分為多個組屎暇,每個組包含指定RegionServer集合這樣i就實(shí)現(xiàn)了業(yè)務(wù)之間計(jì)算資源隔離。
2.2驻粟、IO資源隔離:HBase存儲依賴于HDFS系統(tǒng)根悼,HDFS沒有提供業(yè)務(wù)隔離的針對方案,這導(dǎo)致在IO隔離方面沒有好的解決方案蜀撑,目前只能獨(dú)立部署HBase集群進(jìn)行隔離
3挤巡、HBase核心參數(shù)配置
3.1、Region相關(guān)參數(shù)
hbase.hregion.max.filesize:默認(rèn)10G,Region中最大Store的所有文件大小一旦超過該值就會執(zhí)行分裂
太大:導(dǎo)致系統(tǒng)執(zhí)行Compaction消耗大量系統(tǒng)資源酷麦,一定程度上影響業(yè)務(wù)響應(yīng)
太锌蟊啊:導(dǎo)致Region分裂頻繁,太多Region會消耗大量系統(tǒng)資源沃饶,并且在RS故障恢復(fù)時比較耗時
3.2母廷、BlockCache相關(guān)參數(shù)
RegionSever內(nèi)存在20G以內(nèi)就選擇LRUBlockCache,大于20G選擇BucketCache的offHeap模式
hfile.block.cache.size:默認(rèn)為0.4瀑晒、設(shè)置LRUCache的內(nèi)存大小,0.4表示JVM內(nèi)存的40%
當(dāng)前HBase默認(rèn)采用LRUCache策略徘意,blockCache和MemStore大小均為JVM的40%
hbase.bucketcache.ioengine:BucketCache策略的模式選擇,包含heap轩褐、offheap椎咧、file三種。分別使用堆內(nèi)存把介、堆外內(nèi)存以及SSD硬盤作為存儲介質(zhì)
hbase.bucketcache.size:堆外內(nèi)存大小勤讽。
3.3、MemStore相關(guān)參數(shù)
hbase.hregion.memstore.flush.size:默認(rèn)128M,MemStore大于該值就會觸發(fā)Flush,如果當(dāng)前系統(tǒng)flush比較頻繁拗踢,并且內(nèi)存資源比較充足脚牍,可以適當(dāng)提高,調(diào)大的副作用巢墅,這可能造成宕機(jī)時需要Split的HLog數(shù)量增多(原因是诸狭,你存在內(nèi)存的東西變多了,宕機(jī)丟失數(shù)據(jù)更多君纫、所以要恢復(fù)的HLog數(shù)據(jù)也會變多)驯遇,從而延長故障恢復(fù)
hbase.hregion.memstore.block.multiplier:默認(rèn)為4,表示一旦某個Region中所有寫入MemStore的數(shù)據(jù)大小總和達(dá)到MemStore大小的4倍蓄髓,就會強(qiáng)制執(zhí)行Flush,并拋出RegionTooBusyException.如果日志中出現(xiàn)類似‘“Above memstore limit,regionName=,server=,memstoreSize="就需要考慮修改該參數(shù)了叉庐。
hbase.regionserver.global.memstore.size:默認(rèn)0.4,表示占用總JVM內(nèi)存大小的40%会喝,整個RegionSever上所有MemStore的數(shù)據(jù)總大小不能超過該值陡叠,否則會阻塞所有請求并強(qiáng)制執(zhí)行Flush。一旦寫入阻塞肢执,查看日志是否會有Blocking updates on關(guān)鍵字枉阵,如果存在說明當(dāng)前RS Memstore已經(jīng)超過閾值,需要明確是不是Region數(shù)目太多蔚万,單表列簇設(shè)計(jì)太或者該參數(shù)設(shè)置太小岭妖。
hbase.regionserver.global.memstore.lower.limit:默認(rèn)0.95,表示達(dá)到JVM * hbase.regionserver.global.memstore.size 的0.95時就會選擇最大的MemStore進(jìn)行Flush
hbase.regionserver.opionalcaheflushinterval:默認(rèn)為1H反璃,HBase會發(fā)起一個線程定期flush所有的MemStore
3.4昵慌、Compaction相關(guān)參數(shù)
hbase.hstore.compactionThreshold:默認(rèn)為3,當(dāng)Store中文件數(shù)超過該閾值就會觸發(fā)Compaction
hbase.hstore.compactiom.max:默認(rèn)是10淮蜈,最多可參與minor compaction 的文件數(shù)
hbase.regionserver.thread.compaction.throttle:默認(rèn)是2G,是評估單個Compaction為大還是小的依據(jù)斋攀,為了防止大的compaction長時間執(zhí)行阻塞其他小的compaction、HBase會根據(jù)compaction的大小進(jìn)行分離處理梧田,每種Compaction會分配獨(dú)立的線程池淳蔼。
hbase.regionseever.thread.compaction.large/small:默認(rèn)為1侧蘸,大compact 、小compact處理的線程數(shù)鹉梨,在負(fù)載比較高的集群讳癌,可以適當(dāng)增加
hbase.hstore.blockingStoreFiles: 默認(rèn)是10,表示某個Store文件數(shù)一旦大于該閾值,就會導(dǎo)致阻塞更新存皂,日志中出現(xiàn) too many store files 就要查看該值設(shè)置是否合理
hbase.hregion.majorcompaction:默認(rèn)1周進(jìn)行一個Major Compaction晌坤,生產(chǎn)建議大表選擇業(yè)務(wù)低峰期手動執(zhí)行。將此參數(shù)設(shè)置為0代表關(guān)閉自動觸發(fā)
3.5旦袋、Hlog相關(guān)參數(shù)
hbase.regionserver.maxlogs: 默認(rèn)32骤菠,Region觸發(fā)flush條件之一,wal日志文件總數(shù)超過閾值就會強(qiáng)制執(zhí)行flush操作疤孕。默認(rèn)值對于很多集群太小商乎,具體設(shè)置參考HBASE-14951
heap memstore perc maxLogs
1G ? ? ? ? 40% ? ? ? ? ? ? ? ? ? ? ? ? 32
2G ? ? ? ? 40% ? ? ? ? ? ? ? ? ? ? ? ? 32
10G ? ? ? ? 40% ? ? ? ? ? ? ? ? ? ? ? ? 80
20G ? ? ? ? 40% ? ? ? ? ? ? ? ? ? ? ? ? 160
32G ? ? ? ? 40% ? ? ? ? ? ? ? ? ? ? ? ? 256
hbase.regionserver.hlog.splitlog.writer.threads:默認(rèn)為3,RegionSever在恢復(fù)數(shù)據(jù)時HLog日志按照Region分組之后重新寫入HDFS的線程數(shù)祭阀,生產(chǎn)環(huán)境中Region個數(shù)普遍較多鹉戚,為了加速數(shù)據(jù)恢復(fù),建議調(diào)大
3.6专控、請求隊(duì)列相關(guān)參數(shù)
hbase.regionserver.handler.count:默認(rèn)30崩瓤,服務(wù)端用來處理用戶請求的線程數(shù),生產(chǎn)通常需要將該值調(diào)到100-200踩官,請求時間由2部分構(gòu)成却桶,排隊(duì)時間和處理時間,需要關(guān)注排隊(duì)時間蔗牡,如果排隊(duì)很長颖系,需要檢查此參數(shù)是否合理
hbase.ipc.server.callqueue.handler.factor:默認(rèn)為0,服務(wù)端設(shè)置隊(duì)列個數(shù)辩越,加入該值為0.1嘁扼,那么服務(wù)器就會設(shè)置 30*0.1=3個隊(duì)列。
hbase.ipc.server.callqueue.read.ratio:默認(rèn)為0黔攒,表示服務(wù)端讀寫業(yè)務(wù)分別占用隊(duì)列的比例
hbase.ipc.server.call.queue.scan.ratio:默認(rèn)為0趁啸,表示在讀的隊(duì)列中 get 和scan的隊(duì)列占比
3.7、其他重要參數(shù)
hbase.online.schema.update.enable:默認(rèn)為true.更新表schema的時候不需要先disable在enable督惰。直接在線更新即可不傅。建議開啟
hbase.quota.enabled:默認(rèn)為false,表示是否開啟quota功能,quota的功能主要是限制用戶/表的QPS赏胚,起到限流作用
hbase.snapshot.endbled:默認(rèn)為true.表示是否開啟snapshot功能访娶,建議開啟
zookeeper.session.timeout:默認(rèn)180s。表示RS與zk的超時時間觉阅,超時之后RS將會被踢出集群
hbase.zookeeper.useMutil:默認(rèn)為ture崖疤。開啟ZKmutil功能秘车,在某些場景下可以加速批量請求。生產(chǎn)建議設(shè)置為true
hbase.coprocessor.master.classes:生產(chǎn)建議設(shè)置org.apache.hadoop.hbase.security.access.AccessController,可以使用grant 對namespace劫哼、table
叮趴、CF設(shè)置訪問權(quán)限
hbase.coprocessor.region.classes:生產(chǎn)建議設(shè)置為org.apache.hadoop.hbase.security.token.TokenProvider,org.apache.hadoop.hbase.security.access.AccessController
4、HBase表設(shè)計(jì)
4.1权烧、表名:建議使用nameSpace + 表名的方式疫向,將同一個業(yè)務(wù)的表放在一個同一個命令空間下
4.2、列簇屬性設(shè)置
4.2.1豪嚎、VERSION: 保留最大版本數(shù),默認(rèn)是1.
4.2.2谈火、BLOCKCACHE: 是否開啟Block Cache侈询,默認(rèn)true.在兩種場景下可以設(shè)置為flase: 數(shù)據(jù)量很大且讀取沒有任何熱點(diǎn);表數(shù)據(jù)僅供OLAP,沒有OLTP需求
4.2.3糯耍、BLOOMFILTER:默認(rèn)是ROW扔字。ROW模式表示僅僅根據(jù)Rowkey就可以判斷待查找數(shù)據(jù)是否存在HFile中,而ROWCOL模式只對指定列的隨機(jī)讀由優(yōu)化作用温技,通常建議選擇ROW模式
4.2.4革为、TTL:數(shù)據(jù)失效時間
4.2.5、COMPRESSION:壓縮算法舵鳞,建議SNAPPY,壓縮率震檩,編碼速率等方面表現(xiàn)更加優(yōu)秀
4.2.6、DATA_BLOCK_ENCODING:數(shù)據(jù)編碼算法蜓堕,生產(chǎn)不使用PREFIX_TREE編碼算法
4.2.7抛虏、BLOCKSIZE: 文件塊大小,默認(rèn)是64k,建議選擇默認(rèn)套才。
4.2.8迂猴、DFS_REPLICATION:數(shù)據(jù)Block在HDFS上的副本數(shù),默認(rèn)是3
4.2.9背伴、IN_MEMORY:如果表中某些列的數(shù)據(jù)量不大沸毁。但是進(jìn)行g(shù)et/scan操作頻率又特別高,而且要求延遲更低傻寂,此時采用IN_MEMORY效果比較好
4.3息尺、表屬性設(shè)置
4.3.1、預(yù)分區(qū)設(shè)置屬性:建議所有表線上進(jìn)行預(yù)分區(qū)疾掰,NUMREGIONS表示預(yù)分區(qū)個數(shù)掷倔。SPLITALGO代表切分策略
4.3.2、MAX_FILESIZE:最大文件大小个绍,默認(rèn)是10G勒葱,配合Region的分裂
4.3.3浪汪、READONLY:只讀表,默認(rèn)為false
4.3.4凛虽、COMPACTION_ENABLED:compaction是否開啟死遭,默認(rèn)為true,表示允許Minor/Major Compaction自動執(zhí)行
4.3.5、MEMSTORE_FLUSHSIZE:單個MemStore的大小凯旋,默認(rèn)128M
4.3.6呀潭、DURABLITY:WAL持久化級別
SKIP_WAL:只寫緩存,不寫HLog至非,不可取
ASYNC_WAL:異步寫入HLog
SYNC_WAL:同步寫入日志文件钠署,數(shù)據(jù)只是被寫入文件系統(tǒng)緩存中并沒有真正落盤。默認(rèn)是此級別
FSYNC_WAL:同步將數(shù)據(jù)寫入日志文件并強(qiáng)制落盤荒椭,這是最嚴(yán)格的寫入級別谐鼎,保證數(shù)據(jù)不丟失,性能相對較差
USER_DEFAULT:如果用戶沒有指定持久化級別趣惠,默認(rèn)HBase使用SYN_WAL等級持久化數(shù)據(jù)put.setDurability(Durability.SYNC_WAL);