HiveServer2的0.13版本存在一个bug,会导致该机器上的ZK连接数超过定义上限,详细可见HIVE-8596描述。在我们的线上集群中,因为这个bug导致了一个有意思的故障。
线上YARN集群版本为Hadoop2.5.0-cdh5.2.0,包含7个NodeManger节点,假设为host1——host7。相关配置:可分配给容器的物理内存数量(yarn.nodemanager.resource.memory-mb)为8G,Reduce任务内存(mapreduce.reduce.memory.mb)为2G。host1上部署了HiveServer2,并且出现了HIVE-8596的bug。Reduce任务前要完成的Map任务数量(mapreduce.job.reduce.slowstart.completedmaps)为0.8.Mapreduce任务超时(mapreduce.task.timeout)为10分钟。
在06:09:54时,Application-A开始运行,其包括50个Map任务和28个reduce任务,Map中需要连接ZK。有5个Map任务分配到host1上,其余45个分配到host2——host7上。
至06:10:14时,host2——host7上的45个Map任务全部完成。不幸的是,由于HIVE-8596的缘故,host1上的任务第一次尝试全部失败,所以10分钟(mapreduce.task.timeout)后会抛出超时错误,并且准备尝试第二次,此时大约为06:20。悲催的是,在06:10:14后,由于mapreduce.job.reduce.slowstart.completedmaps阈值已经满足(45/50>0.8),所以从06:10:14到06:10:17,陆续启动了24个reduce。这些reduce任务均匀的分布在host2——host7上,即每个节点有4个。host1因为失败次数过多,已被YARN剔除在外,所以它不再接受reduce任务,剩余5个Ma

HiveServer2在0.13版本的一个bug导致ZK连接数超出限制,引发线上故障。在YARN集群中,由于此问题,MapReduce任务在host1上失败,而Reduce任务耗尽所有节点内存,形成死锁。受影响的任务不仅自身受阻,还影响了其他依赖ZK的Application,导致长时间的服务中断。
1590

被折叠的 条评论
为什么被折叠?



