# 配置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 -e "" --hivevar batchid=xxx --hivevar kill=true
   ```
   
5. 登录beeline客户端，启动断线重连机制。
   ```
   beeline
   ```
   启动断线重连机制：
   ```
   set hivevar:batchid=xxx
   ```
   
 
#### 参数说明
可在MRS集群Manager界面的Hive组件参数配置界面，查看或根据实际需求修改Hive Beeline断线重连功能涉及的参数。
 表1Hive Beeline断线重连功能相关参数介绍 
| 参数                                          | 参数说明                                                                                                                                                                     |
|:---|:---|
| zk.cleanup.finished.job.interval            | 启用Beeline断线重连功能后，集群定时清理已完成作业相关数据的时间间隔，默认值为60秒。                                                                                                                          |
| zk.cleanup.finished.job.outdated.threshold | 启用Beeline断线重连功能后，距任务结束点的间隔时间，默认值为60分钟。 只有超过该时长的已完成作业，才会被清理任务（由"zk.cleanup.finished.job.interval"触发）从ZooKeeper中删除，该参数需结合集群作业量、负载特征、存储压力等维度配置。 |
| batch.job.max.retry.count                  | 启用Beeline断线重连功能后，单批次任务的最大重试次数，当单批次的任务失败重试次数超过这个值，就会删除该任务记录，下次运行时将从头开始运行，默认是10次。                                                                                         |
| beeline.reconnect.zk.path                  | 启用Beeline断线重连功能后，在ZooKeeper上存储数据的根节点。 Hive服务的默认存储目录是"/beeline"。                                                                              |
   
