分享

Hive异常分析之锁表导致CM无法启动

本帖最后由 levycui 于 2021-4-14 23:07 编辑
问题导读:
1、CM上如何监控到Hive异常?
2、如何从Hive层面分析问题?
3、如何从CM层面分析问题?
4、innodb_buffer_pool_size如何理解使用?


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出现如下异常:
2021-04-14_230544.jpg

同时查看“Hive MetaStore  Cannary Server持续时间”在对应时间点达到11分钟,这是一个非常大的延迟值。

2021-04-14_230622.jpg

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日志:
  1. 2020-10-13 18:41:03,561 ERROR org.apache.hadoop.hive.metastore.RetryingHMSHandler: [pool-5-thread-121151]: Retrying HMSHandler after 2000 ms (attempt 7 of 10) with error: javax.jdo.JDOUserException: One or more instances could not be made persistent
  2.         at org.datanucleus.api.jdo.JDOPersistenceManager.makePersistentAll(JDOPersistenceManager.java:787)
  3.         ...
  4. Nested Throwables StackTrace:
  5. java.sql.SQLException: The total number of locks exceeds the lock table size
  6.         at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:996)
  7.         at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3887)
  8.         at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3823)
  9. at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2435)
复制代码
2021-04-14_230710.jpg

2021-04-14_230732.jpg

HiveServer2 日志:
2021-04-14_230759.jpg

2.通过查找资料,MySQL报“The total number of locks exceeds the lock table size”应该是Hive的锁表或者大量查询导致innodb_buffer_pool_size不够大导致。


3.2 CM层面分析问题


1.查看cloudera-scm-server.log日志,发现从18:06开始一直到CM重启恢复正常,一直有The total number of locks exceeds the lock table size 【2】报错,此报错和我们在HiveServer2和Hive MetaStore 日志看到的是一样的。

【2】

CM Server 日志:
  1. 2020-10-13 18:06:43,097 ERROR 1587731234@scm-web-21766:org.hibernate.engine.jdbc.spi.SqlExceptionHelper: The total number of locks exceeds the lock table size
  2. Caused by: java.sql.SQLException: The total number of locks exceeds the lock table size
  3. 2020-10-13 18:18:14,418 ERROR 2022524682@scm-web-21780:org.hibernate.engine.jdbc.spi.SqlExceptionHelper: The total number of locks exceeds the lock table size
  4. 2020-10-13 18:34:22,883 ERROR MainThread:org.hibernate.engine.jdbc.spi.SqlExceptionHelper: The total number of locks exceeds the lock table size
  5. Caused by: java.sql.BatchUpdateException: The total number of locks exceeds the lock table size
复制代码

2021-04-14_230840.jpg

2021-04-14_230901.jpg

通过查看Cloudera 官网,有一个相关的KB【3】说到这个问题

https://my.cloudera.com/knowledg ... base-Error?id=70674

2021-04-14_230944.jpg

2021-04-14_231004.jpg

4.问题解决


1. 这个问题的本质应该是短时间内MySQL的某种资源的耗尽,我们可以尝试增加innodb_buffer_pool_size为256MB来解决此问题。

1).临时增大innodb_buffer_pool_size,重启mysql后会失效:

SET GLOBAL innodb_buffer_pool_size = 268435456;
show variables like '%innodb_buffer_pool%';

2021-04-14_231032.jpg

2021-04-14_231052.jpg

2).永久增大innodb_buffer_pool_size,在/etc/my.cnf的 [mysqld]下增加innodb_buffer_pool_size=256MB,重启MySQL。此方法会短暂影响集群使用,最好在变更停止集群的时候操作。

innodb_buffer_pool_size=256M
systemctl restart mysqld
show variables like '%innodb_buffer_pool%';

2021-04-14_231127.jpg

2021-04-14_231152.jpg


5.总结

1. 这个问题的本质应该是短时间内MySQL的某种资源的耗尽,可以尝试增加innodb_buffer_pool_size来增加这种资源。这个参数的具体值并有特别的说明【4】。这个需要根据集群上的实际运行情况自行调整,建议和DBA团队商量确定此值。

【4】
  1. https://docs.cloudera.com/documentation/enterprise/latest/topics/cm_ig_mysql.html
复制代码


2.当Hive处于高负载的时候,比较容易出现此问题。这次问题的根本原因就是因为某些大的hive query导致Hive压力增大和异常Hive query导致Hive lock table,而Hive MetaStore是在MySQL上的,从而也会导致大量的读写写入MySQL。而我们的CM 的元数据和Hive的元数据共用一个MySQL,因为Hive MetaStore的繁忙异常把MySQL的某种资源的耗尽,从而也引起CM异常,所以这两个问题是前后对应的关系。


3.我们最开始是通过一个个Hive实例重启,然后过了大概十分钟,再重启CM Server解决了此问题,本质是重启Hive实例的过程中中断了异常的hive query,从而把MySQL的资源释放出来。需要根本解决此问题还是要增加innodb_buffer_pool_size的值。

作者:周鹏辉
来源:https://mp.weixin.qq.com/s/krDCZ3v-tMeLF5DAHA-sMw


最新经典文章,欢迎关注公众号


没找到任何评论,期待你打破沉寂

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条