負載信息:RegionServer:3個
Region:5400多個
現象:在使用Spark對HBase進行scan操作時發現有些task執行比較慢
原因分析:查看Spark應用的executor日志,發現查詢慢的都是027節點請求的。
獲取此節點的regionServer日志,發現scan的時候有responseTooSlow的打印。
查詢日志發現這段時間在regionServer上出現很多次GC pause的打印,說明當前內存不足。
綜上,當前regionServer內存的配置不足以應付高並發狀態下的RPC請求。由於實際節點上的業務量/數據量/請求個數存在略微差異,使027節點處理請求時GC出現了延遲。當Spark多並發task執行的時候,GC的pause不能及時地處理查詢請求,從而影響整個查詢的時間。
解決:
調整HMaster的內存及Handler相關配置
1.調整HMaster和RegionServer的GC_OPTS(垃圾回收參數)
RegionServer調整為:
Xms 6G——>16G
-Xmx 6G——>16G
NewSize 64M——>512M
Max NewSize 128M——>512M
Max DirectMemorySize 128M——>1024M
HMaster調整為:
Xms 1G——2G
-Xmx 1G——>2G
NewSize 64M——>256M
Max NewSize 128M——>512M
Max DirectMemorySize 128M——>512M
2.調整RPC Handler(regionServer上處理RPC請求的線程實例數)
hbase.regionserver.handler.count 100——>300
hbase.regionserver.metahandler.count 10——>100