场景:数据中台做了一个数据库在线查询功能,功能做出后发现hive经常性的无法连接
后来查看hiveserver2管理页面(默认10002端口)发现存在很多没有释放掉的session,发现代码中很多地方都没有释放连接,如果不手动释放默认7天才会释放,最大连接数默认500
可以配置hive-site.xml,让hive手动释放连接
sql执行完成后30秒,如果没有进行任何操作,待检查任务执行时,会自动释放掉session
开启ide超时检查,会检查已经执行完成的任务,30秒后自动释放session
具体多少秒后自动释放,根据访问频次来修正,如果访问的很少可以时间长一点
<property>
<!-- 如果在此持续时间(以毫秒为单位)内未访问自动释放session,sql没有执行完成不会有影响,30秒就行-->
<name>hive.server2.idle.session.timeout</name>
<value>30000</value>
</property>
<property>
<!-- 会话/操作超时的检查间隔(以毫秒为单位),30秒就行-->
<name>hive.server2.session.check.interval</name>
<value>30000</value>
</property>
<property>
<!-- ide超时检查,需要开启 -->
<name>hive.server2.idle.session.check.operation</name>
<value>true</value>
</property>
<property>
<!-- ide如果在此持续时间(以毫秒为单位)内未访问,则操作将关闭。这可以通过设置为0来禁用。在CDP中默认为6小时 设置为正值,仅检查终端状态下的操作(FINISHED、CANCELED、CLOSED、ERROR)。 设置为负值,检查所有操作而不考虑状态。例如,-7200000 的值表示正在运行的查询/操作如果仍在运行,将在 2 小时后超时。 -->
<name>hive.server2.idle.operation.timeout</name>
<value>30000</value>
</property>