全部产品
Search
文档中心

开源大数据平台E-MapReduce:开启native查询加速

更新时间:May 20, 2026

JindoTable提供Native Engine,支持查询加速。系统默认不开启加速,开启之后可以提升在Spark、Hive或Presto上ORC或Parquet格式文件的查询速度。

前提条件

已创建EMR-3.35.0及后续版本或EMR-4.9.0及后续版本,且ORC或Parquet文件已存放至JindoFS或OSS,创建集群详情请参见创建集群

背景信息

Spark、Hive和Presto上服务支持的引擎和存储格式如下。

引擎

ORC

Parquet

Spark2

支持

支持

Presto

支持

不支持

Hive2

不支持

支持

使用限制

  • 不支持Binary类型。

  • 不支持分区列存储在文件中的分区表。

  • 不支持EMR 5.X及后续版本的EMR集群。

  • 不支持代码spark.read.schema(userDefinedSchema),userDefinedSchema不同于文件schema issue。

  • 支持Date类型区间为1400-01-01到9999-12-31。

  • 同一个表中查询列不支持区分大小写。例如,NAME和name两个列在同一个表中无法使用查询加速。

提升Spark性能

  1. 开启JindoTable ORC或Parquet加速。

    说明
    • 因为查询加速使用的是堆外内存,所以在Spark任务中建议添加配置--conf spark.executor.memoryOverhead=4g提高Spark申请额外资源用来进行加速。

    • Spark调用读取ORC或Parquet时,需要使用native来启用加速。

    • 全局设置

      详细请参见全局设置Spark

    • Job级别设置

      使用spark-shell或者spark-sql时可以添加Spark的启动参数。

      spark.sql.extensions==io.delta.sql.DeltaSparkSessionExtension,com.aliyun.emr.sql.JindoTableExtension

      作业详情请参见Spark Shell作业配置Spark SQL作业配置

  2. 检查开启情况。

    1. 登录Spark History Server UI页面。

    2. 在Spark的SQL页面,查看执行任务。

      当出现JindoDataSourceV2Scan时,表示开启成功。否则,请排查步骤1中的操作。在 Spark SQL 页面的 Details for Query 10 中,查询耗时 2.3 min。DAG 执行计划显示 JindoDataSourceV2Scan 节点扫描了 15.6 GB 数据,读取约 140 亿行(read output rows 14,076,201,649),经过过滤后剩余约 27 亿行(filtered output rows 2,718,064,652),涉及 4,722 个分区;数据经 Project 节点流向 HashAggregate 节点,最终聚合输出 4,722 行。

提升Presto性能

因为Presto已经内置JindoTable native加速的catalog: hive-acc,所以您可以直接使用catalog: hive-acc来启用查询加速。

示例如下。

presto --server emr-header-1:9090 --catalog hive-acc --schema default
说明

目前使用Presto查询加速功能时,暂不支持复杂数据类型,例如Map、Struct或Array。

提升Hive性能

重要

如果您对作业稳定性要求较高时,建议不要开启native查询加速。

因为EMR Hive 2.3.7(EMR-3.35.0)已经内置JindoTable Parquet加速的插件,所以您可以直接设置hive.jindotable.native.enabled来启用查询加速,或者可以在控制台配置页面的hive-site.xml页签,添加自定义参数hive.jindotable.native.enabledtrue,来开启查询加速并重启Hive,此方式适用于Hive on MR和Hive on Tez。

代码示例如下。

set hive.jindotable.native.enabled=true;
说明

目前使用Hive查询加速功能时,暂不支持复杂数据类型,例如Map、Struct或Array。

全局设置Spark

  1. 进入Spark页面。

    1. 登录阿里云E-MapReduce控制台

    2. 在顶部菜单栏处,根据实际情况选择地域和资源组

    3. 单击上方的集群管理页签。

    4. 集群管理页面,单击相应集群所在行的详情

    5. 在左侧导航栏,选择集群服务 > Spark

  2. 在Spark服务页面,单击配置页签。

  3. 搜索参数spark.sql.extensions,修改参数值为io.delta.sql.DeltaSparkSessionExtension,com.aliyun.emr.sql.JindoTableExtension

  4. 保存配置。

    1. 单击保存

    2. 确认修改对话框中,输入执行原因,单击确定

  5. 重启ThriftServer。

    1. 在右上角选择操作 > 重启ThriftServer

    2. 执行集群操作对话框中,输入执行原因,单击确定

    3. 确认对话框中,单击确定