作者:周鹏辉
1.文档编写目的本文描述了一次CDH集群中,Hive锁表导致集群元数据MySQL的Hive MetaStore锁表,从而引起CM服务中断并且无法重启的异常分析。
- 文档概述
1.问题描述
2.问题分析
3.问题解决
4.总结
- 测试环境
1.CDH和CM版本:CDH5.15.1和CM5.15.1
2.集群启用Kerbeos OpenLDAP Sentry
2.问题描述1.10月13日18:15分开始CM上监控到Hive出现如下异常:
同时查看“Hive MetaStore Cannary Server持续时间”在对应时间点达到11分钟,这是一个非常大的延迟值。
2.过了大概十多分钟,发现CM上进行操作反应很慢,尝试重启CM Server,发现无法重启。
3.这两个问题接着发生,当时为了尽快恢复业务,先尝试一个个Hive 实例进行重启,过了大概十分钟,再次尝试重启CM Server,发现可以正常启动了。
3.问题分析3.1 Hive层面分析问题1.首先查看HiveServer2和Hive MetaStore 的日志,发现10月13日6~7 PM期间的HiveServer2连接很频繁,HiveServer2和Hive MetaStore日志里发现有很多和数据库有关的报错【1】,这些错误会影响到canary test以及DDL操作。
【1】
Hive MetaStore日志:
2020-10-1318:41:03,561ERRORorg.apache.hadoop.hive.metastore.RetryingHMSHandler:[pool-5-thread-121151]:RetryingHMSHandlerafter2000ms(attempt7of10)witherror:javax.jdo.JDOUserException:Oneormoreinstancescouldnotbemadepersistent
atorg.datanucleus.api.jdo.JDOPersistenceManager.makePersistentAll(JDOPersistenceManager.java:787)
...
NestedThrowablesStackTrace:
java.sql.SQLException:Thetotalnumberoflocksexceedsthelocktablesize
atcom.mysql.jdbc.SQLError.createSQLException(SQLError.java:996)
atcom.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3887)
atcom.mysql.jdbc.MysqlIO.checkErrorPacket(MySQLIO.java:3823)
atcom.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2435)