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语句,只提示成功或失败,不返回表中的数据,和开源社区保持一致。

  • 当有英文分号(;)隔开的多个SQL语句时,Spark引擎只会执行最后一行SQL。

  • ThriftServer引擎启动需要一定时间,如果出现启动时失败可以等待一定时间重试。

适用场景

  • 临时进行数据计算,无需返回所有数据。

  • 需要执行大量的DDL语句。

  • 希望在提交DQL语句后,可以立即开始执行, 且对资源隔离不敏感,能允许一定的失败。

特点

  • 同一个资源组中的SQL由共享的ThriftServer引擎执行,并返回1000条结果到控制台。

  • 资源隔离是线程级的。多个用户在同一个Spark应用中执行SQL,相互之间可能存在干扰。

  • 线程级的配置可以通过配置SQL生效。

  • 应用级别的配置,需要重启ThriftServer引擎才能生效。如需修改应用级别的配置,需要先停止ThriftServer,参数配置完成后重新启动ThriftServer引擎。启动和停止ThriftServer的操作,请参见启停ThriftServer

启动方式

使用Job型资源组交互式执行SQL时,需要启动ThriftServer,您可以通过以下两种方式启动ThriftServer。

  • SQLConsole窗口,选择Job型资源组和Spark引擎。执行SQL语句时,在弹窗中选择启动ThriftServer

  • 在资源组列表中,单击目标Job型资源组操作列的高级配置,完成参数配置后,单击启动。详情请参见启动ThriftServer

已启动ThriftServer的Job型资源组,在执行SQL时,都会采用交互式执行。