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性能
-
开启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作业配置。
-
-
检查开启情况。
-
登录Spark History Server UI页面。
-
在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.enabled为true,来开启查询加速并重启Hive,此方式适用于Hive on MR和Hive on Tez。
代码示例如下。
set hive.jindotable.native.enabled=true;
目前使用Hive查询加速功能时,暂不支持复杂数据类型,例如Map、Struct或Array。
全局设置Spark
-
进入Spark页面。
-
在顶部菜单栏处,根据实际情况选择地域和资源组。
-
单击上方的集群管理页签。
-
在集群管理页面,单击相应集群所在行的详情。
-
在左侧导航栏,选择。
-
在Spark服务页面,单击配置页签。
-
搜索参数spark.sql.extensions,修改参数值为io.delta.sql.DeltaSparkSessionExtension,com.aliyun.emr.sql.JindoTableExtension。
-
保存配置。
-
单击保存。
-
在确认修改对话框中,输入执行原因,单击确定。
-
-
重启ThriftServer。
-
在右上角选择。
-
在执行集群操作对话框中,输入执行原因,单击确定。
-
在确认对话框中,单击确定。
-