如何在 Hive 中配置会话超时

时间:2022-11-02 12:04:44

hive.server2.session.check.interval
hive.server2.idle.operation.timeout 中配置以下设置。

hive.server2.idle.session.timeout

1). hive.server2.idle.session.timeout

会话将在这段时间内未访问时关闭,以毫秒为单位;通过设置为零或负值来禁用。

例如,值“86400000”指示会话将在 1 天不活动后超时。

2). hive.server2.session.check.interval

会话/操作超时的检查间隔(以毫秒为单位),可以通过设置为零或负值来禁用该间隔。

例如,值“3600000”表示会话将每 1 小时检查一次。

3) hive.server2.idle.operation.timeout

当在此时间段内未访问时,操作将关闭,以毫秒为单位;通过设置为零来禁用。对于正值,仅检查终端状态(已完成、已取消、已关闭、错误)中的操作。对于负值,请检查所有操作,而不考虑状态。

例如,值“7200000”表示如果查询/操作仍在运行,它将在 2 小时后超时。

因此,如果您结合上述示例中的三个设置,我们可以总结以下用例:

1)如果您启动了HS2会话,例如直线,之后没有执行任何操作,则HS2将触发24个会话检查,然后再确定自上次活动以来已经过去了24小时,然后会话将被关闭

2) 如果您在直线上工作了 2 小时,然后让直线保持打开状态,之后什么都不做,HS2 将触发总共 26 个会话检查(2 个在您工作时,另外 24 个在空闲时),会话将在初始打开后 26 小时关闭。

3)如果你在直线上工作了2个小时,你开始运行一个查询,该查询将运行1小时然后返回结果,则空闲计时器实际上从数据返回的时间开始,所以如果你之后什么都不做,HS2将在另外24小时后终止会话,所以会话总共持续了27小时(2+1+24)

4)例如,如果您的查询时间超过hive.server2.idle.operation.timeout定义的2小时,则查询将被取消,因此您将全部丢失结果

5)如果hive.server2.session.check.interval = 0并且hive.server2.idle.session.timeout>0,那么它将具有与hive.server2.idle.session.timeout = 0相同的效果,因为禁用

6) 如果 hive.server2.session.check.interval > hive.server2.idle.session.timeout > 0,则实际超时将与 hive.server2.session.check.interval 相同。

例如,如果 hive.server2.session.check.interval = 20 分钟,但 hive.server2.idle.session.timeout = 10 分钟,则在检查发生时将发生超时,即 20 分钟。

基本经验法则如下:

hive.server2.session.check.interval < hive.server2.idle.operation.timeout < hive.server2.idle.session.timeout 建议的值是:

hive.server2.session.check.interval = 1 小时
hive.server2.idle.operation.timeout = 1
hive.server2.idle.session.timeout= 3

这将适用于大多数集群,但您可以根据集群的行为方式以及每个查询的运行时间更改该值。