负载信息: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