# 切换Hive执行引擎
#### 操作场景
Hive的执行引擎是负责处理和执行HQL查询的核心组件，它将查询转换为底层计算框架的任务，并协调这些任务的执行，以实现高效的数据处理。
Hive支持MapReduce、 Tez、 Spark作为执行引擎，默认为Tez（MRS 3.1.2-LTS之前版本默认为MapReduce），通过选择不同的执行引擎，用户可以优化查询性能，满足不同的业务需求，如[表1]所示。
 表1Hive执行引擎介绍 
| 执行引擎类型    | 说明                                                                                                                     | 适用场景                  |
|:---|:---|:---|
| MapReduce | MRS 3.1.2-LTS之前版本的默认引擎，基于Hadoop MapReduce框架，稳定性高，兼容性强。将查询转换为多个Map和Reduce阶段，数据需多次落地磁盘，资源利用率较低。                         | 适合简单的批处理任务及对延迟不敏感的场景。 |
| Tez         | MRS 3.1.2-LTS及之后版本的默认引擎，引擎多个MapReduce任务合并为一个有向无环图（DAG），减少数据落地磁盘次数，比MapReduce引擎高效，减少了任务之间的开销，适合复杂查询，但是调试难度较高（DAG 结构复杂）。 | 适合复杂查询和需要多次数据处理的任务。     |
| Spark      | 基于Spark框架，数据在内存中缓存，适合迭代计算。支持Hive SQL和Spark SQL，可无缝集成Spark生态。内存占用较大，需合理配置资源，对小数据集可能因调度开销导致性能下降。                          | 适合迭代任务、数据复杂分析场景。        |
   
#### 前提条件
如果需要将执行引擎切换为"Tez"并Tez WebUI页面查看任务执行情况，集群需已安装Yarn服务的TimelineServer角色，且角色运行正常。
#### 在客户端切换执行引擎
1. 安装并登录Hive客户端，具体操作请参考[Hive客户端使用实践](https://support.huaweicloud.com/cmpntguide-lts-mrs/mrs_01_0952.html)。
2. 执行以下命令查看Hive的执行引擎： 
   ```
   set hive.execution.engine;
   ```
   例如，命令执行后的回显结果如下，表示Hive的执行引擎为Tez：
   ```
   +---------------------------+
   |            set            |
   +---------------------------+
   | hive.execution.engine=tez |
   +---------------------------+
   1 row selected (0.258 seconds)
   ```
   
   
3. 执行以下命令切换Hive执行引擎，支持设置执行引擎为MapReduce、Spark、Tez，对应参数值为"mr"、"spark"、"tez"： 
   ```
   set hive.execution.engine=mr;
   ```
   MRS 3.1.2-LTS版本，如果需将执行引擎设置为Tez，还需开启"yarn.timeline-service.enabled"参数：
   ```
   set yarn.timeline-service.enabled=true;
   ```
   需注意：
   - "yarn.timeline-service.enabled"参数开启后可以在Tez服务中通过TezUI查看Tez引擎执行任务的详细情况。开启后任务信息将上报TimelineServer，如果TimelineServer实例故障，会导致任务失败。
   
   - 由于Tez使用ApplicationMaster缓冲池，"yarn.timeline-service.enabled"必须在提交Tez任务前开启，否则会导致此参数无法生效，需要重新登录客户端进行配置。
   
   - 当执行引擎需要切换为其他引擎时，需要通过客户端执行以下命令关闭"yarn.timeline-service.enabled"参数：
     ```
     set yarn.timeline-service.enabled=false;
     ```
     
   
   
   
   
4. （可选）如果需要指定Yarn运行队列，可以在客户端执行以下命令指定运行队列： 
   ```
   set tez.queue.name=default;
   ```
   
   
5. 提交并执行Hive任务。
6. 任务执行完成后，可登录到Manager界面，选择"集群 \> 服务 \> Yarn"，单击"ResourceManager Web UI"右侧的超链接进入Yarn WebUI页面，即可查看任务执行情况。其中： 
   - 如果执行引擎为Spark，还可在Manager界面，选择"集群 \> 服务 \> Spark"，单击"Spark Web UI"右侧的超链接进入Spark WebUI页面，即可查看相应任务执行情况。
   
   - 如果执行引擎为Tez，还可在Manager界面，选择"集群 \> 服务 \> Tez"，单击"Tez Web UI"右侧的超链接进入Tez WebUI页面，即可查看相应任务执行情况。
   
   
   
   
 
#### 配置Hive服务默认执行引擎
1. 登录FusionInsight Manager界面，选择"集群 \> 服务 \> Hive \> 配置 \> 全部配置 \> HiveServer（角色）"，搜索"hive.execution.engine"参数。 
   ![](https://support.huaweicloud.com/cmpntguide-lts-mrs/zh-cn_image_0000002358679158.png "点击放大")
   
   
2. 将"hive.execution.engine"参数设置为对应的执行引擎。 
   - mr：设置Hive服务执行引擎为MapReduce。
   
   - spark：设置Hive服务执行引擎为Spark。
   
   - tez：默认值，设置Hive服务执行引擎为Tez。 MRS 3.1.2-LTS版本，如果由其他执行引擎切换为Tez，还需选择"Hive（服务） \> 自定义"，搜索"yarn.site.customized.configs"，并添加名称为"yarn.timeline-service.enabled"的自定义参数，值为"true"。其中：
     - "yarn.timeline-service.enabled"开启后可以在Tez服务中通过TezUI查看Tez引擎执行任务详细情况。开启后任务信息将上报TimelineServer，如果TimelineServer实例故障，会导致任务失败。
     
     - 由于Tez使用ApplicationMaster缓冲池，"yarn.timeline-service.enabled"必须在提交Tez任务前开启，否则会导致此参数无法生效，需要重新登录客户端配置。
     
     - 当执行引擎需要切换为其他引擎时，需要将自定义参数"yarn.timeline-service.enabled"的值设置为"false"。
      
   
   
   
   
3. 单击"保存"在弹出窗口单击"确定"。 
   MRS 3.6.0-LTS之前版本，选择"概览 \> 更多 \> 重启服务"，输入当前用户密码，单击"确定"开始重启Hive服务。
   MRS 3.6.0-LTS及之后版本，单击"保存"保存配置。等待界面提示"操作成功"，单击"完成"，配置已修改。该参数动态生效，不需要重启Hive服务。
   
   
4. 安装并登录Hive客户端，具体操作请参考[Hive客户端使用实践](https://support.huaweicloud.com/cmpntguide-lts-mrs/mrs_01_0952.html)。
5. 提交并执行Hive任务。
6. 任务执行完成后，可登录到Manager界面，选择"集群 \> 服务 \> Yarn"，单击"ResourceManager Web UI"右侧的超链接进入Yarn WebUI页面，即可查看任务执行情况。其中： 
   - 如果执行引擎为Spark，还可在Manager界面，选择"集群 \> 服务 \> Spark"，单击"Spark Web UI"右侧的超链接进入Spark WebUI页面，即可查看相应任务执行情况。
   
   - 如果执行引擎为Tez，还可在Manager界面，选择"集群 \> 服务 \> Tez"，单击"Tez Web UI"右侧的超链接进入Tez WebUI页面，即可查看相应任务执行情况。
   
   
   
   
 
