更新时间:2025-07-14 GMT+08:00

配置Hive Beeline高可靠性

操作场景

  • 在批处理任务运行过程中,beeline客户端由于网络异常等问题断线时,Hive能支持beeline在断线前已经提交的任务继续运行。当再次运行该批处理任务时,已经提交过的任务不再重新执行,直接从下一个任务开始执行。
  • 在批处理任务运行过程中,HiveServer服务由于某些原因导致故障时,Hive能支持当再次运行该批处理任务时,已经成功执行完成的任务不再重新执行,直接从HiveServer2故障时正在运行的任务开始运行。

约束与限制

  • 如果运行的SQL脚本依赖数据的失效性或SQL脚本中使用了一些内置时间函数,建议不启用断点重连机制,或者每次运行时使用新的batchid。因为重复执行时,可能由于某些SQL语句已经执行过了不再重新执行,导致获取到过期的数据。
  • 一个SQL脚本里面会包含一个或多个子任务。如果SQL脚本中存在先创建再删除临时表的逻辑,建议将删除临时表的逻辑放到脚本的最后。假定删除临时表子任务的后续子任务执行失败,并且删除临时表的子任务之前的子任务用到了该临时表;当下一次以相同batchid执行该SQL脚本时,因为临时表在上一次执行时已被删除,则会导致删除临时表的子任务之前用到该临时表的子任务(不包括创建该临时表的子任务,因为上一次已经执行成功,本次不会再执行,仅可编译)编译失败。这种情况下,建议使用新的batchid执行脚本。

操作步骤

  1. 以Hive客户端安装用户登录安装客户端的节点。
  2. 执行以下命令,切换到客户端安装目录,配置环境变量并认证用户。

    切换至客户端安装目录:

    cd 客户端安装目录

    加载环境变量:

    source bigdata_env

    认证用户,如果集群未开启Kerberos认证请跳过该操作:

    kinit Hive业务用户
  3. beeline启动断线重连功能,相关参数配置请参见表1
    beeline -e "${SQL}" --hivevar batchid=xxx

    其中“xxxx”表示每一次通过beeline提交任务的批次号,通过该批次号,可以识别出先提交的任务。如果提交任务时不带批次号,该特性功能不会启用。“xxxx”的值是执行任务时指定的。

  4. beeline kill正在运行的任务。
    beeline -e "" --hivevar batchid=xxx --hivevar kill=true
  5. 登录beeline客户端,启动断线重连机制。
    beeline

    启动断线重连机制:

    set hivevar:batchid=xxx

参数说明

可在Hive参数配置界面,查看或根据实际需求修改Hive Beeline断线重连功能涉及的参数。

表1 Hive Beeline断线重连功能相关参数介绍

参数

参数说明

k.cleanup.finished.job.interval

启用Beeline断线重连功能后,执行清理任务的间隔时间,默认隔60s执行一次。

zk.cleanup.finished.job.outdated.threshold

启用Beeline断线重连功能后,节点的过期时间,每个批次的任务都会生成对应节点,从当前批次任务的结束时间开始算,如果超过60分钟,则表示已经过期了,那么就清除节点。

batch.job.max.retry.count

启用Beeline断线重连功能后,单批次任务的最大重试次数,当单批次的任务失败重试次数超过这个值,就会删除该任务记录,下次运行时将从头开始运行,默认是10次。

beeline.reconnect.zk.path

启用Beeline断线重连功能后,存储任务执行进度的根节点,Hive服务默认是“/beeline”。