压力环境下HiveServer报错
集群规模:
37+3台物理机,每台128G内存;CPU:2*16C;SATA磁盘,2T*12
hadoop社区版本:**
商业版本:FusionInsight_HD_V100R002C30
MetaStore:高斯数据库(Postgresql)
问题描述:
关闭流控开关之后,2016-08-09到08-10号出现多次主备倒换,查看单个HiveServer连接个数大约为500左右。
问题分析:
当前版本上Hive服务的几个背景:
HiveServer区分主备模式,单一时刻内,只有一个HiveServer对外提供服务。
主备选举的触发条件是HiveServer与ZooKeeper之前的连接断开超过配置的超时时间hive.zookeeper.session.timeout。
HiveServer当前支持对所有的连接进行并行处理,在并行过程中,依据SQL的复杂程度,越复杂就越消耗内存。
基于上述3个背景特点,结合现网业务量(同时关闭了流控系统),在业务暴涨并且SQL业务复杂的情况下,对HiveServer的内存消耗非常大,当前HiveServer内存配置为16G,已经比较大了,在内存不够时,出现GC停顿的时间最长可以达到1分钟左右。超过了当前配置的ZK连接超时时间45s,从而引发主备选举执行倒换。
例如8月10日凌晨5点多的这次切换,GC时间长达55秒。
根本原因:
业务连接过多,超越了当前HiveServer配置的物理极限,导致GC时间太长引发主备倒换。
解决措施
临时解决措施:
暂时减缓系统压力,增加HiveServer的内存,同时给ZK设置更长的超时时间以满足大内存引发的GC时间长的状况,保持HiveServer持续运行,能支撑更多连接
最终解决措施
升级到FusionInsight V100R002C60,在该版本中,HiveServer采用多活架构,在单个HiveServer处理能力不足的情况下,可以通过增加HiveServer的数量来达到负载分担的效果,提供更多的处理能力。并进行合理进行的物理参数配置,开启HiveServer的流控机制,确保HiveServer工作在其能承受的范围内
规避措施
暂时减缓系统压力,增加HiveServer的内存,同时给ZK设置更长的超时时间以满足大内存引发的GC时间长的状况,保持HiveServer持续运行,能支撑更多连接。