在生產環境使用HBase過程當中,隨着數據量的不斷增長,查詢HBase數據變得愈來愈慢,對於業務來講是不可用的,須要對讀性能進行優化緩存
從hbase監控指標來看,發現FullGC次數頻繁,你們都知道FullGC對系統的影響很大,會使系統資源都耗在GC上,其它性能就會影響,另外一個異常是Compact隊列一直在阻塞,須要compact的文件過多又不沒法及時獲得compact,這個就致使小文件愈來愈多得不到合併影響讀性能。性能
初步定位到緣由以後,考慮從如下幾個方面進行優化優化
1. 增長regionserver堆棧內存大小,此優化主要考慮到FullGC次數過多,儘可能避免Full GC的發生spa
2. 觀察到集羣讀緩存率太低,不少時候讀的數據都不在緩存中,blockcache得不到利用,因此考慮讀寫cahce比例調整,減少讀增大memstore內存,提升寫性能,避免寫請求被阻塞線程
3. 調整small compact線程數,原來是設置了1 個small compact,爲提升compact速率,線程調整爲3code
4. 調整表region數,原來是對於全部的表預分配了1000個region,致使一些數據量小的表region數過多,優化後針對表的數據量調整了region的數量server
5. 調整region hfile數量 , 針對region hfile文件數過多的表,進行手動major_compact, 以提升讀性能blog
6. 隔離表, 此步主要考慮到compact隊列阻塞嚴重,因此考慮將一些表用幾臺新機器進行隔離, 最本質的其實仍是下降單region的hfile數量,下降以後在定位到數據在哪一個region以後,能夠大幅減小掃描hfile的次數,具體方法以下,隊列
a 確認要隔離的表 b 確認隔離的機器列表 c 建立group add_rsgroups 'test_tables' d 將機器列表move到新建組別 move_rsgroup_servers 'test_tables',['1.1.1.1:60020','1.1.1.2:60020','1.1.1.3:60020'] c 查看上面操做是否成功 get_rsgrup 'test_tables' d 將須要隔離的表move到group move_rsgroup_tables 'test_tables',['table1','table2']
進行隔離後,發現compact阻塞嚴重的表已經降低了,最直觀的表現是讀性能從原來的10幾秒優化到200ms之內,讀性能獲得質的變化,最主要的優化是下降了每一個region的hfile數量,提升了定位數據區間的效率內存