大数据运维实战:hive锁泄露导致的zookeeper异常

Posted 涤生大数据

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了大数据运维实战:hive锁泄露导致的zookeeper异常相关的知识,希望对你有一定的参考价值。

问题描述:

突然收到生产集群告警HDFS服务两个Failover Controller服务,备节点RM服务,以及集群中的zookeeper服务全部出现异常告警。已提交任务出现大量失败。

问题排查:

查看cm控制台,果然发现告警的几个服务都出现红色告警标志,因为出现问题的服务貌似都和zk服务有关联,于是先排查zk服务异常的原因。

观察zk的几个核心监控指标,最明显的发现角色的cpu突然飙高,cm的Canary 持续时间从平时的几秒直接飙升到二十几秒。同时我们观察到一个核心指标项,zk服务的数据大小也是直线飙升。同时zk服务节点出现GC。

结合以上信息,因为是线上服务,影响面积较大,想着要先恢复服务,于是重启了整个zk集群,但是!!!Zk服务并没有成功启动。并且现象还是zk服务GC。于是想到应该有大量的请求在访问zk服务,到导致zk服务负载过高,触发了GC。

分析zk快照文件:

提示:关于zk快照文件等知识需要大家另行补充!!!下面只列出操作步骤。

通过zk自带的工具类格式化快照文件:

java  -Djute.maxbuffer=3145728 -cp /opt/cloudera/parcels/CDH/lib/zookeeper/lib/slf4j-api-1.7.5.jar:/opt/cloudera/parcels/CDH/lib/zookeeper/zookeeper.jar org.apache.zookeeper.server.SnapshotFormatter /var/lib/zookeeper/version-2/snapshot.33000205eb > /tmp/zk/zk.log

汇总znode并排序:

grep "/" /tmp/zk/zk.log | awk -F'/' 'print $2'  | sort | uniq -c

发现大量的znode集中在hive_zookeeper_namespace_hive。立马想到应该和集群中任务有关,因为这里hive_zookeeper_namespace_hive主要是hive的锁在zk的 持久节点。

查看hive_zookeeper_namespace_hive节点详情:

但是查看集群整体的任务量,发现并没有激增,不是很理解为什么会导致znode节点的激增。

于是乎请教了google,然后出现了以下结论;

出问题去官网查看jiar哈:https://issues.apache.org/jira/browse/HIVE-15997

故障恢复:

  知道了问题的原因,于是先临时停止hiveserver2服务,阻止新任务的提交,降低zk的负载,zk这边也加大了jvm的堆内存,然后再重启整个zk服务。Zk服务正常运行。然后重启rm和hdfs服务也都恢复正常。

以上是关于大数据运维实战:hive锁泄露导致的zookeeper异常的主要内容,如果未能解决你的问题,请参考以下文章

SpringBoot电商项目实战 — Zookeeper的分布式锁实现

20分钟带您ZooKeeper 分布式锁设计实战

分布式锁三大技术方案实战——基于zookeeper方式实现分布式锁

HiveServer2中使用jdbc访问hbase时导致ZooKeeper连接持续增加的解决

大数据学习路径

大数据学习系列之七 ----- Hadoop+Spark+Zookeeper+HBase+Hive集