普通Spark SQL任务提交过程中,总是会存在:创建Driver container、创建Executor container等临时申请资源步骤,对于小时级别的ETL任务来说,申请资源所需时间占总任务执行时间比例比较小,用户往往能接受这部分开销。但随着大数据分析的普及,越来越多人会使用Spark SQL进行即席查询,希望能在秒级完成任务,并获取查询结果,临时申请资源的方案则显得不那么合适。
因此,EMR Serverless Spark在队列中,提供了 SQL专用资源,该资源默认支持预热,减少临时资源申请时间,可以将分钟级任务时间缩短至秒级;还支持根据任务负载动态借用通用资源进行扩缩容,满足绝大部分的ETL与即席查询需要,提升您的生产效率。
在开通EMR Serverless Spark队列时,如果您的资源中包括了SQL专用资源,则后续用该队列提交SQL任务时,则会默认使用预热能力。
EMR Serverless Spark会提前将一个独享的预热SparkSQL服务拉起,服务的最小规格即为您的SQL专用资源规格。
当您提交查询时,会直接提交至您的预热SparkSQL服务,跳过作业的资源申请阶段,将您任务时间缩短至秒级;
当您的SQL专用资源紧张,且您的通用资源还有剩余时,独享的SparkSQL服务会临时占用通用资源,将作业中的部分Job/Task 调度上去,任务完成后,则会将这部分通用资源释放,实现动态扩缩容。
1.无法自定义Driver/Executor规格:
因为SparkSQL服务为预先拉起,所以在该队列上的SQL作业无法自定义每个Driver/Executor 的规格,如果您有特殊规格需求,请工单联系我们;或在SQL中加上:set tqs.query.engine.type = sparkcli;
,强制使用通用资源,临时拉起Driver/Executor来执行任务。
2.在SQL中,只能设置SparkSQL Runtime 参数,Runtime参数列表详见:spark官网
如果您的队列中存在通用资源,且希望设置非SparkSQL Runtime参数
则可在SQL中加上如下参数,使用非预拉起模式来执行任务:set tqs.query.engine.type = sparkcli;
3.队列更配时,会重启预热SparkSQL服务,有可能导致任务失败,请在任务低峰期进行资源调整。