切换Hive执行引擎
操作场景
Hive的执行引擎是负责处理和执行HQL查询的核心组件,它将查询转换为底层计算框架的任务,并协调这些任务的执行,以实现高效的数据处理。
Hive支持MapReduce、 Tez、 Spark作为执行引擎,默认为Tez(MRS 3.1.2-LTS之前版本默认为MapReduce),通过选择不同的执行引擎,用户可以优化查询性能,满足不同的业务需求,如表1所示。
执行引擎类型 |
说明 |
适用场景 |
---|---|---|
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角色,且角色运行正常。
在客户端切换执行引擎
- 安装并登录Hive客户端,具体操作请参考Hive客户端使用实践。
- 执行以下命令查看Hive的执行引擎:
set hive.execution.engine;
例如,命令执行后的回显结果如下,表示Hive的执行引擎为Tez:
+---------------------------+ | set | +---------------------------+ | hive.execution.engine=tez | +---------------------------+ 1 row selected (0.258 seconds)
- 执行以下命令切换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;
- (可选)如果需要指定Yarn运行队列,可以在客户端执行以下命令指定运行队列:
set tez.queue.name=default;
- 提交并执行Hive任务。
- 任务执行完成后,可登录到Manager界面,选择“集群 > 服务 > Yarn”,单击“ResourceManager Web UI”右侧的超链接进入Yarn WebUI页面,即可查看任务执行情况。其中:
- 如果执行引擎为Spark,还可在Manager界面,选择“集群 > 服务 > Spark”,单击“Spark Web UI”右侧的超链接进入Spark WebUI页面,即可查看相应任务执行情况。
- 如果执行引擎为Tez,还可在Manager界面,选择“集群 > 服务 > Tez”,单击“Tez Web UI”右侧的超链接进入Tez WebUI页面,即可查看相应任务执行情况。
配置Hive服务默认执行引擎
- 登录FusionInsight Manager界面,选择“集群 > 服务 > Hive > 配置 > 全部配置 > HiveServer(角色)”,搜索“hive.execution.engine”参数。
- 将“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”。
- 单击“保存”在弹出窗口单击“确定”。
选择“概览 > 更多 > 重启服务”,输入当前用户密码,单击“确定”开始重启Hive服务。
- 安装并登录Hive客户端,具体操作请参考Hive客户端使用实践。
- 提交并执行Hive任务。
- 任务执行完成后,可登录到Manager界面,选择“集群 > 服务 > Yarn”,单击“ResourceManager Web UI”右侧的超链接进入Yarn WebUI页面,即可查看任务执行情况。其中:
- 如果执行引擎为Spark,还可在Manager界面,选择“集群 > 服务 > Spark”,单击“Spark Web UI”右侧的超链接进入Spark WebUI页面,即可查看相应任务执行情况。
- 如果执行引擎为Tez,还可在Manager界面,选择“集群 > 服务 > Tez”,单击“Tez Web UI”右侧的超链接进入Tez WebUI页面,即可查看相应任务执行情况。