出现问题:使用Hive Beeline执行hql语句时,经常报“Too many connections”错误。
经检查,一般会出现该问题的主是3种问题:MySQL配置问题、HiveServer2配置问题、haproxy配置问题。
下面主要介绍下三种问题的解决方案。
MySQL配置问题
可能原因:
- 同时执行的hql语句过多,hive使用的元数据库使用的MySQL配置连接数不足
- 有大量MySQL连接未释放
- 执行的查询语句太复杂,查询元数据超时(可能性最小)
解决
/etc/my.cnf
文件/etc/my.cnf 1
2
3
4
5
6
7
8# 增加以下内容
[mysqld]
# 最大连接数
max_connections=1000
# 非交互式连接(客户端)最大空闲时长(s)
interactive_timeout=1800
# 交互式连接(jdbc)最大空闲时长(s)
wait_timeout=1800- 重启MySQL服务
1
systemctl restart mysqld
mysql连接状态相关查询语句
- 查看mysql连接情况
1 show processlist;- mysql长连接默认检测时间
1
2 show variables like 'wait_timeout';
show variables like 'interactive_timeout';
HiveServer2配置问题
可能原因:
- hive允许的连接数过少
- 在运行的hive连接过多且不释放
解决
- 如果是hive连接过多且不释放,需要针对单个作业进行分析或直接kill掉占用过多的作业;
- 如果是hive允许的连接数过少,可以修改HiveServer2的配置,增加连接数,_但该需要根据实际情况去配置,一味增加最大线程数可以会加大服务器压力_,但实际上并没有解决问题。
以下为HS2的修改:
- 修改并保存
hive-site.xml
,或在CM中找到HS2设置修改hive-site.xml 1
2
3
4
5<property>
<name>hive.server2.thrift.max.worker.threads</name>
<value>600</value>
<description>Maximum number of Thrift worker threads</description>
</property> - 重启HS2
1
2
3
4
5
6
7
8# 停止
hive --service hiveserver2 --stop
# 验证启停
jps
# 启动
hive --service hiveserver2 --start
haproxy配置问题
可能原因:
使用HA连接hive,HA的配置最大连接数过少、等待时间过短导致
解决
- 在
/etc/haproxy/haproxy.cfg
新增或修改(根据实际修改)/etc/haproxy/haproxy.cfg 1
2
3
4
5
6
7
8
9defaults
timeout http-request 1m #默认http请求超时时间
timeout queue 10m #默认队列超时时间
timeout connect 10m #默认连接超时时间
timeout client 10m #默认客户端超时时间
timeout server 10m #默认服务器超时时间
timeout http-keep-alive 30s #默认持久连接超时时间
timeout check 1m #设置超时检查超时时间
maxconn 3000 #设置最大连接数 - 重启 haproxy
1
systemctl restart haproxy