
# 配置Hive Beeline高可靠性
#### 操作场景
- 在批处理任务运行过程中，beeline客户端由于网络异常等问题断线时，Hive能支持beeline在断线前已经提交的任务继续运行。当再次运行该批处理任务时，已经提交过的任务不再重新执行，直接从下一个任务开始执行。
- 在批处理任务运行过程中，HiveServer服务由于某些原因导致宕机时，Hive能支持当再次运行该批处理任务时，已经成功执行完成的任务不再重新执行，直接从HiveServer2宕机时正在运行的任务开始运行。
![](https://support.huaweicloud.com/cmpntguide-mrs/public_sys-resources/note_3.0-zh-cn.png)
本章节适用于MRS 3.x及后续版本。
#### 操作示例
1. beeline启动断线重连功能。 示例：
   beeline -e "${*SQL* }" --hivevar batchid=*xxxxx*
   
2. beeline kill正在运行的任务。 示例：
   beeline -e "" --hivevar batchid=*xxxxx* --hivevar kill=true
   
3. 登录beeline客户端，启动断线重连机制。 登录beeline客户端后，执行"set hivevar:batchid=*xxxx*"
   ![](https://support.huaweicloud.com/cmpntguide-mrs/public_sys-resources/note_3.0-zh-cn.png)
   使用说明：
   - 其中"*xxxx* "表示每一次通过beeline提交任务的批次号，通过该批次号，可以识别出先提交的任务。如果提交任务时不带批次号，该特性功能不会启用。"*xxxx* "的值是执行任务时指定的，如下所示，"*xxxx* "值为"012345678901"：
     **beeline -f hdfs://hacluster/user/hive/table.sql --hivevar batchid=012345678901**
     
   
   - 如果运行的SQL脚本依赖数据的失效性，建议不启用断点重连机制，或者每次运行时使用新的batchid。因为重复执行时，可能由于某些SQL语句已经执行过了不再重新执行，导致获取到过期的数据。
   
   - 如果SQL脚本中使用了一些内置时间函数，建议不启用断点重连机制，或者每次运行时使用新的batchid，理由同上。
   
   - 一个SQL脚本里面会包含一个或多个子任务。如果SQL脚本中存在先创建再删除临时表的逻辑，建议将删除临时表的逻辑放到脚本的最后。假定删除临时表子任务的后续子任务执行失败，并且删除临时表的子任务之前的子任务用到了该临时表；当下一次以相同batchid执行该SQL脚本时，因为临时表在上一次执行时已被删除，则会导致删除临时表的子任务之前用到该临时表的子任务（不包括创建该临时表的子任务，因为上一次已经执行成功，本次不会再执行，仅可编译）编译失败。这种情况下，建议使用新的batchid执行脚本。
   
   
   参数说明：
   - zk.cleanup.finished.job.interval：执行清理任务的间隔时间，默认隔60s执行一次。
   
   - zk.cleanup.finished.job.outdated.threshold：节点的过期时间，每个批次的任务都会生成对应节点，从当前批次任务的结束时间开始算，如果超过60分钟，则表示已经过期了，那么就清除节点。
   
   - batch.job.max.retry.count：单批次任务的最大重试次数，当单批次的任务失败重试次数超过这个值，就会删除该任务记录，下次运行时将从头开始运行，默认是10次。
   
   - beeline.reconnect.zk.path：存储任务执行进度的根节点，Hive服务默认是/beeline。
     
 
