更新时间:2025-09-04 GMT+08:00
分享

切换Hive执行引擎

操作场景

Hive的执行引擎是负责处理和执行HQL查询的核心组件,它将查询转换为底层计算框架的任务,并协调这些任务的执行,以实现高效的数据处理。

Hive支持MapReduce、 Tez、 Spark作为执行引擎,默认为Tez(MRS 3.1.2-LTS之前版本默认为MapReduce),通过选择不同的执行引擎,用户可以优化查询性能,满足不同的业务需求,如表1所示。

表1 Hive执行引擎介绍

执行引擎类型

说明

适用场景

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客户端使用实践
  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”参数。

  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. 单击“保存”在弹出窗口单击“确定”。

    选择“概览 > 更多 > 重启服务”,输入当前用户密码,单击“确定”开始重启Hive服务。

  4. 安装并登录Hive客户端,具体操作请参考Hive客户端使用实践
  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页面,即可查看相应任务执行情况。

相关文档