cm打开mysql_0829-5.15.1-Hive锁表导致CM无法启动异常分析

本文分析了Hive锁表导致CM无法启动的问题,详细介绍了MySQL报错'The total number of locks exceeds the lock table size'的原因,并提出通过增大innodb_buffer_pool_size来解决此问题。在Hive高负载时,可能引发此类问题,导致CM异常。解决方案包括临时和永久增加innodb_buffer_pool_size,并建议根据集群实际运行情况调整该参数。
摘要由CSDN通过智能技术生成

ea82755b43a2e71c8907a4cb771214a0.png

4e357618f30062169fd56eed39aa3acd.png

HiveServer2 日志:

6b5b3fca1437589665701c4d96df462d.png

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 日志:

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

Caused by: java.sql.SQLException: The total number of locks exceeds the lock table size

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

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

Caused by: java.sql.BatchUpdateException: The total number of locks exceeds the lock table size

97218e847e2dbba76e121a33523d3df6.png

2ba76a70ce06768067637e7d3d1245f6.png

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

https://my.cloudera.com/knowledge/Services-Fail-when-Interacting-with-a-MySQL-Database-Error?id=70674

e00b7055e4e77d658481bff85e335c97.png

ba8c0dab443f640b687213f52ea367a9.png

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%';

42b058100cad700a54e86b97090ce73b.png

65b95509db6be1cfe408b1e3c044bf5b.png

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%';

c8d29eb44704d23db66010e3b540b43b.png

9a19c1fbf56785713c593e72ca50689f.png

211714064dbe0c9f73b9c42948d73848.png

5.总结

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

【4】

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的值。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值