Spark SQL执行方式
云原生数据仓库 AnalyticDB MySQL 版支持使用批处理和交互式两种方法执行Spark SQL,两种执行方式都直接与AnalyticDB for MySQL的元数据服务连通,可以读写AnalyticDB for MySQL的库表。本文介绍批处理和交互式两种执行方式的注意事项、适用场景、特点及启动方法。
批处理
注意事项
使用批处理方式执行SQL时,必须在SQL执行开始处使用
USE <database_name>;
语法选择一个数据库。SQL语句中指定表时,必须为
database_name.table_name
格式。批处理方式执行DML、DDL或DQL等任何SQL语句时,只有返回执行成功或者失败,不返回数据。执行成功的结果会抽样一部分打印到日志中。如需查看SQL语句返回的数据,详情请参见查看Spark应用信息。
适用场景
执行多条相互依赖的SQL语句。
SQL语句需要严格的资源隔离。
需要处理较大规模的数据,例如使用SQL执行一次性的ETL。
有复杂的第三方依赖包需要上传,且这些包可能需要反复测试和替换。
特点
批处理方式提交的SQL运行在单独的Spark应用中,可以保证稳定性。
支持通过SQL语句描述独立的配置,如
SET spark.sql.adaptive.coalescePartitions.minPartitionSize = 2MB;
。批处理方式执行的SQL中如果包含SELECT语句,这些SELECT语句的执行结果会抽样一部分打印到日志中,您可以在日志中查看。
启动方法
在SQLConsole窗口,选择Job型资源组和Spark引擎。输入SQL语句后,单击立即执行。
交互式执行
注意事项
交互式执行的DDL和DML语句的执行结果仅返回最多1000行数据。
使用交互执行方式执行的DDL语句,只返回执行成功或者失败,不返回数据。例如执行
CREATE TABLE
语句,只提示成功或失败,不返回表中的数据,和开源社区保持一致。Spark Interactive型资源组启动需要一定时间,如果出现启动时失败可以等待一定时间重试。
适用场景
临时进行数据计算,无需返回所有数据。
需要执行大量的DDL语句。
希望在提交DQL语句后,可以立即开始执行, 且对资源隔离不敏感,能允许一定的失败。
特点
资源隔离是线程级的。多个用户在同一个Spark应用中执行SQL,相互之间可能存在干扰。
线程级的配置可以通过配置SQL生效。
应用级别的配置,需要重启Spark Interactive型资源组才能生效。如需修改应用级别的配置,需要先停止Spark Interactive型资源组,参数配置完成后重新启动Spark Interactive型资源组。
启动方式
在SQLConsole窗口,选择Spark Interactive型资源组和Spark引擎。输入SQL语句后,单击立即执行。