创建EMR Spark SQL节点

您可以通过创建EMR(E-MapReduce) Spark SQL节点,实现分布式SQL查询引擎处理结构化数据,提高作业的执行效率。

前提条件

  • 已注册EMR集群至DataWorks。操作详情请参见注册EMR集群至DataWorks

  • 已拥有开发权限。(可选,RAM账号需要)进行任务开发的RAM账号已被添加至对应工作空间中,并具有开发空间管理员(权限较大,谨慎添加)角色权限,添加成员的操作详情请参见为工作空间添加空间成员

  • 已购买资源组完成资源组配置。包括绑定工作空间、网络配置等。详情请参见新增和使用Serverless资源组

  • 已创建业务流程。数据开发(DataStudio)基于业务流程对不同开发引擎进行具体开发操作,所以您创建节点前需要先新建业务流程,操作详情请参见创建业务流程

  • 如果您在开发任务时,需要特定的开发环境支持,可使用DataWorks提供的自定义镜像功能,定制化构建任务执行所需的组件镜像。更多信息,请参见镜像管理

使用限制

  • 仅支持使用Serverless资源组(推荐)或独享调度资源组运行该类型任务。

  • DataLake或自定义集群若要在DataWorks管理元数据,需先在集群侧配置EMR-HOOK。若未配置,则无法在DataWorks中实时展示元数据、生成审计日志、展示血缘关系、开展EMR相关治理任务。配置EMR-HOOK,详情请参见配置Spark SQL的EMR-HOOK

  • EMR on ACK类型的Spark集群及EMR Serverless Spark集群不支持血缘。

  • DataLake集群与自定义集群支持使用可视化注册函数,EMR on ACK 类型的Spark集群、EMR Serverless Spark集群不支持使用可视化注册函数。

步骤一:创建EMR Spark SQL节点

  1. 进入数据开发页面。

    登录DataWorks控制台,切换至目标地域后,单击左侧导航栏的数据开发与治理 > 数据开发,在下拉框中选择对应工作空间后单击进入数据开发

  2. 新建EMR Spark SQL节点。

    1. 右键单击目标业务流程,选择新建节点 > EMR > EMR Spark SQL

      说明

      您也可以鼠标悬停至新建,选择新建节点 > EMR > EMR Spark SQL

    2. 新建节点对话框中,输入名称,并选择引擎实例节点类型路径。单击确认,进入EMR Spark SQL节点编辑页面。

      说明

      节点名称支持大小写字母、中文、数字、下划线(_)和小数点(.)。

步骤二:开发EMR Spark SQL任务

在EMR Spark SQL节点编辑页面双击已创建的节点,进入任务开发页面,执行如下开发操作。

开发SQL代码

在SQL编辑区域开发任务代码,您可在代码中使用${变量名}的方式定义变量,并在节点编辑页面右侧导航栏的调度配置>调度参数中为该变量赋值。实现调度场景下代码的动态传参,调度参数使用详情,请参考调度参数支持的格式,示例如下。

SHOW TABLES; 
-- 通过${var}定义名为var的变量,若将该变量赋值${yyyymmdd},可实现创建以业务日期作为后缀的表。
CREATE TABLE IF NOT EXISTS userinfo_new_${var} (
ip STRING COMMENT'IP地址',
uid STRING COMMENT'用户ID'
)PARTITIONED BY(
dt STRING
); --可以结合调度参数使用。
说明
  • SQL语句最大不能超过130KB。

  • 如果您工作空间的数据开发中绑定多个EMR数据源,则需要根据业务需求选择合适的引擎。如果仅绑定一个EMR引擎,则无需选择。

(可选)配置高级参数

您可在节点高级设置处配置Spark特有属性参数。更多Spark属性参数设置,请参考Spark Configuration。不同类型EMR集群可配置的高级参数存在部分差异,具体如下表。

DataLake集群/自定义集群:EMR on ECS

高级参数

配置说明

queue

提交作业的调度队列,默认为default队列。关于EMR YARN说明,详情请参见队列基础配置

priority

优先级,默认为1。

FLOW_SKIP_SQL_ANALYZE

SQL语句执行方式。取值如下:

  • true:表示每次执行多条SQL语句。

  • false(默认值):表示每次执行一条SQL语句。

说明

该参数仅支持用于数据开发环境测试运行流程。

ENABLE_SPARKSQL_JDBC

提交SQL代码的方式。取值如下:

  • true:表示采用JDBC的方式提交SQL代码。当EMR集群无Kyuubi服务时,提交SQL代码至Spark Thrift Server,当EMR集群有Kyuubi服务时,则通过JDBC方式提交SQL代码至Kyuubi,并支持自定义Spark参数。

    两种方式均支持元数据血缘,但提交至Thrift Server的任务会缺少元数据对应节点任务的产出信息。

  • false(默认值):表示采用Spark-submit cluster方式提交SQL代码。此提交方式下,Spark2和Spark3均支持元数据血缘和产出信息。还支持自定义Spark参数。

    说明
    • Spark-submit cluster提交方式默认在EMR集群HDFS的/tmp目录下创建临时文件及目录,您需要保证目录具有读写权限。

    • 当选择Spark-submit cluster方式提交时,您可以直接在高级配置里追加自定义SparkConf参数。提交代码时DataWorks会自行在命令中加上新增的参数。例如,"spark.driver.memory" : "2g"

USE_GATEWAY

设置本节点提交作业时,是否通过Gateway集群提交。取值如下:

  • true:通过Gateway集群提交。

  • false(默认值):不通过Gateway集群提交,默认提交到header节点。

说明

如果本节点所在的集群未关联Gateway集群,此处手动设置参数取值为true时,后续提交EMR作业时会失败。

DATAWORKS_SESSION_DISABLE

适用于开发环境直接测试运行场景。取值如下:

  • true:表示每次运行SQL语句都会新建一个JDBC Connection。

  • false(默认值):表示用户在一个节点里运行不同的SQL语句时会复用同一个JDBC Connection。

说明

该参数配置为false时不会打印Hive的yarn applicationId,如需打印yarn applicationId,请配置该参数为true

其他

自定义Spark Configuration参数,添加Spark特有属性参数。

配置格式如下: spark.eventLog.enabled : false ,DataWorks会自动在最终下发EMR集群的代码中进行补全,格式为:--conf key=value

说明

DataWorks支持您设置全局Spark参数,即按照工作空间粒度指定DataWorks各模块使用的Spark参数,您可自行指定该全局Spark参数的优先级是否高于指定模块内的Spark参数。关于设置全局Spark参数,详情请参见设置全局Spark参数

EMR Serverless Spark集群

相关参数设置请参见提交Spark任务参数设置

高级参数

配置说明

queue

提交作业的调度队列,默认为dev_queue队列。

priority

优先级,默认为1。

FLOW_SKIP_SQL_ANALYZE

SQL语句执行方式。取值如下:

  • true:表示每次执行多条SQL语句。

  • false(默认值):表示每次执行一条SQL语句。

说明

该参数仅支持用于数据开发环境测试运行流程。

ENABLE_SPARKSQL_JDBC

提交SQL代码的方式。取值如下:

  • true:表示采用JDBC的方式提交SQL代码。当EMR集群无Kyuubi服务时,提交SQL代码至Spark Thrift-Server,当EMR集群有Kyuubi服务时,则通过JDBC方式提交SQL代码至Kyuubi,并支持自定义Spark参数。

    两种方式均支持元数据血缘,但提交至Thrift-Server的任务会缺少元数据对应节点任务的产出信息。

  • false(默认值):表示采用Spark-submit cluster方式提交SQL代码。此提交方式下,Spark2和Spark3均支持元数据血缘和产出信息。还支持自定义Spark参数。

    说明
    • Spark-submit cluster提交方式默认在EMR集群HDFS的/tmp目录下创建临时文件及目录,您需要保证目录具有读写权限。

    • 当选择Spark-submit cluster方式提交时,您可以直接在高级配置里追加自定义SparkConf参数。提交代码时DataWorks会自行在命令中加上新增的参数。例如,"spark.driver.memory" : "2g"

USE_GATEWAY

设置本节点提交作业时,是否通过Gateway集群提交。取值如下:

  • true:通过Gateway集群提交。

  • false(默认值):不通过Gateway集群提交,默认提交到header节点。

说明

如果本节点所在的集群未关联Gateway集群,此处手动设置参数取值为true时,后续提交EMR作业时会失败。

DATAWORKS_SESSION_DISABLE

适用于开发环境直接测试运行场景。取值如下:

  • true:表示每次运行SQL语句都会新建一个JDBC Connection。

  • false(默认值):表示用户在一个节点里运行不同的SQL语句时会复用同一个JDBC Connection。

说明

该参数配置为false时不会打印Hive的yarn applicationId,如需打印yarn applicationId,请将该参数配置为true

SERVERLESS_RELEASE_VERSION

Spark引擎版本,默认使用管理中心集群管理中集群配置的默认引擎版本。如需为不同任务设置不同的引擎版本,您可在此进行设置。

说明

注册集群指定的SQL Compute(会话)在EMR Serverless Spark控制台处于未启动状态的时候,高级设置配置中的SERVERLESS_RELEASE_VERSION参数才会生效。

SERVERLESS_QUEUE_NAME

指定资源队列,默认使用管理中心集群管理中集群配置的默认资源队列。如有资源隔离和管理需求,可通过添加队列实现。详情请参见管理资源队列

说明

注册集群指定的SQL Compute(会话)在EMR Serverless Spark控制台处于未启动状态的时候,高级设置配置中的SERVERLESS_QUEUE_NAME参数才会生效。

SERVERLESS_SQL_COMPUTE

指定SQL Compute(SQL会话),默认使用管理中心集群管理中集群配置的默认SQL Compute。如需面向不同任务设置不同的SQL会话,您可在此进行设置。如需创建管理SQL会话,详情请参见管理SQL会话

其他

自定义Spark Configuration参数,添加Spark特有属性参数。

配置格式如下: spark.eventLog.enabled : false ,DataWorks会自动在最终下发EMR集群的代码中进行补全,格式为:--conf key=value

说明

DataWorks支持您设置全局Spark参数,即按照工作空间粒度指定DataWorks各模块使用的Spark参数,您可自行指定该全局Spark参数的优先级是否高于指定模块内的Spark参数。关于设置全局Spark参数,详情请参见设置全局Spark参数

保存并运行SQL任务

在工具栏,单击保存图标,保存编写的SQL语句,单击运行图标,运行创建的SQL任务。

在运行弹窗中,请选择网络连通性通过的资源组,确保DataWorks可正常访问您的Spark服务;在节点代码中使用了变量的情况下,请在调试运行阶段为变量赋值常量。调度时使用的调度参数以及资源组,请参考步骤三调度配置中配置。更多任务调试说明,详情请参见任务调试流程

说明

如果您需要修改代码中的参数赋值,请单击界面上方工具栏的高级运行。参数赋值逻辑详情请参见运行,高级运行和开发环境冒烟测试赋值逻辑有什么区别

Spark集群:EMR on ACK

高级参数

配置说明

FLOW_SKIP_SQL_ANALYZE

SQL语句执行方式。取值如下:

  • true:表示每次执行多条SQL语句。

  • false(默认值):表示每次执行一条SQL语句。

说明

该参数仅支持用于数据开发环境测试运行流程。

USE_GATEWAY

设置本节点提交作业时,是否通过Gateway集群提交。取值如下:

  • true:通过Gateway集群提交。

  • false(默认值):不通过Gateway集群提交,默认提交到header节点。

说明

如果本节点所在的集群未关联Gateway集群,此处手动设置参数取值为true时,后续提交EMR作业时会失败。

其他

自定义Spark Configuration参数,添加Spark特有属性参数。

配置格式如下:spark.eventLog.enabled : false ,DataWorks会自动在最终下发EMR集群的代码中进行补全,格式为:--conf key=value

说明

DataWorks支持您设置全局Spark参数,即按照工作空间粒度指定DataWorks各模块使用的Spark参数,您可自行指定该全局Spark参数的优先级是否高于指定模块内的Spark参数。关于全局Spark参数设置,详情请参见设置全局Spark参数

Hadoop集群:EMR on ECS

高级参数

配置说明

queue

提交作业的调度队列,默认为default队列。关于EMR YARN说明,详情请参见队列基础配置

priority

优先级,默认为1。

FLOW_SKIP_SQL_ANALYZE

SQL语句执行方式。取值如下:

  • true:表示每次执行多条SQL语句。

  • false(默认值):表示每次执行一条SQL语句。

说明

该参数仅支持用于数据开发环境测试运行流程。

USE_GATEWAY

设置本节点提交作业时,是否通过Gateway集群提交。取值如下:

  • true:通过Gateway集群提交。

  • false(默认值):不通过Gateway集群提交,默认提交到header节点。

说明

如果本节点所在的集群未关联Gateway集群,此处手动设置参数取值为true时,后续提交EMR作业时会失败。

其他

自定义Spark Configuration参数,添加Spark特有属性参数。

配置格式如下: spark.eventLog.enabled : false ,DataWorks会自动在最终下发EMR集群的代码中进行补全,格式为:--conf key=value

说明

DataWorks支持您设置全局Spark参数,即按照工作空间粒度指定DataWorks各模块使用的Spark参数,您可自行指定该全局Spark参数的优先级是否高于指定模块内的Spark参数。关于设置全局Spark参数,详情请参见设置全局Spark参数

执行SQL任务

  1. 在工具栏单击高级运行图标,在参数对话框选择已创建的调度资源组,单击运行

    说明
    • 访问公共网络或VPC网络环境的数据源需要使用与数据源测试连通性成功的调度资源组。详情请参见网络连通方案

    • 如果您后续执行任务需要修改使用的资源组,您可单击带参运行高级运行图标,选择需要更换的调度资源组。

    • 使用EMR Spark SQL节点查询数据时,返回的查询结果最大支持10000条数据,并且数据总量不能超过10MB。

  2. 单击保存图标,保存编写的SQL语句。

  3. (可选)冒烟测试。

    如果您希望在开发环境进行冒烟测试,可在执行节点提交或节点提交后执行冒烟测试,操作详情请参见执行冒烟测试

步骤三:配置节点调度

如您需要周期性执行创建的节点任务,可单击节点编辑页面右侧的调度配置,根据业务需求配置该节点任务的调度信息。配置详情请参见任务调度属性配置概述

说明

您需要设置节点的重跑属性依赖的上游节点,才可以提交节点。

步骤四:发布节点任务

节点任务配置完成后,需执行提交发布操作,提交发布后节点即会根据调度配置内容进行周期性运行。

  1. 单击工具栏中的保存图标,保存节点。

  2. 单击工具栏中的提交图标,提交节点任务。

    提交时需在提交对话框中输入变更描述,并根据需要选择是否在节点提交后执行代码评审。

    说明
    • 您需设置节点的重跑属性依赖的上游节点,才可提交节点。

    • 代码评审可对任务的代码质量进行把控,防止由于任务代码有误,未经审核直接发布上线后出现任务报错。如进行代码评审,则提交的节点代码必须通过评审人员的审核才可发布,详情请参见代码评审

如您使用的是标准模式的工作空间,任务提交成功后,需单击节点编辑页面右上方的发布,将该任务发布至生产环境执行,操作请参见发布任务

后续步骤

任务提交发布后,会基于节点的配置周期性运行,您可单击节点编辑界面右上角的运维,进入运维中心查看周期任务的调度运行情况。详情请参见查看并管理周期任务