阿里云DataWorks支持在E-MapReduce上创建Hive、Spark SQL、Spark等节点,实现任务工作流的配置、调度,同时具备元数据管理和数据质量监控告警功能,帮助用户高效开发、治理数据。本文将介绍如何通过阿里云DataWorks提交作业。
支持的集群类型
DataWorks目前支持注册的集群类型如下:
DataLake集群(新版数据湖)
Custom集群(自定义集群)
Hadoop集群(旧版数据湖)
支持在DataWorks使用以下EMR版本的Hadoop集群(旧版数据湖):
EMR-3.38.2、EMR-3.38.3、EMR-4.9.0、EMR-5.6.0、EMR-3.26.3、EMR-3.27.2、EMR-3.29.0、EMR-3.32.0、EMR-3.35.0、EMR-4.3.0、EMR-4.4.1、EMR-4.5.0、EMR-4.5.1、EMR-4.6.0、EMR-4.8.0、EMR-5.2.1、EMR-5.4.3
Hadoop集群(旧版数据湖)已不建议使用,请尽快迁移至DataLake集群,详情请参见Hadoop集群迁移至DataLake集群。
使用限制
任务类型:DataWorks暂不支持执行EMR的Flink任务。
任务执行:DataWorks支持使用Serverless资源组(推荐)或旧版独享调度资源组进行EMR任务执行。
任务治理:
仅EMR Hive、EMR Spark及EMR Spark SQL节点中SQL任务支持产出血缘关系。当集群版本为5.9.1或3.43.1及以上版本时,以上节点均支持查看表级血缘与字段级血缘。
对于Spark类型节点,当EMR集群版本为5.8.0和3.42.0及以上版本时,支持查看表级血缘与字段级血缘,当EMR集群版本低于5.8.0和3.42.0版本时,仅Spark 2.x支持查看表级血缘。
DataLake或自定义集群若要在DataWorks管理元数据,需先在集群侧配置EMR-HOOK。若未配置,则在DataWorks中无法实时展示元数据、生成审计日志、展示血缘关系,EMR相关治理任务将无法开展。目前仅EMR Hive、EMR Spark SQL服务支持配置EMR-HOOK,配置详情请参见配置Hive的EMR-HOOK、配置Spark SQL的EMR-HOOK。
地域限制:目前仅华北3(张家口)地域支持使用EMR Serverless Spark。
开启Kerberos认证的EMR集群的安全组需要对资源组绑定的交换机网段放开UDP协议端口的入权限。
您需单击EMR集群基础信息中集群安全组的
图标,进入安全组详情页签,单击访问规则的入方向,选择手动添加,协议类型选择自定义UDP,端口范围配置详情请查看EMR集群中的
/etc/krb5.conf
文件中对应的kdc端口,授权对象设置为资源组绑定的交换机网段。
前提条件
注意事项
若要实现DataWorks标准模式工作空间的开发环境与生产环境隔离机制,您需要为开发环境和生产环境注册两个不同的EMR集群。且这两个集群的元数据需要使用如下存储方式:
一个EMR集群可以注册在同一个阿里云账号的多个工作空间,但无法跨账号注册至多个工作空间。例如,某集群已注册至当前阿里云账号的工作空间,则该集群将无法跨账号再次被注册至其他阿里云账号的工作空间。
为确保DataWorks资源组正常访问EMR集群,若DataWorks资源组绑定与EMR同一个专有网络和交换机后仍无法连接,请检查EMR集群安全组规则,添加对应交换机网段及常用开源组件的端口的入规则。具体操作请参见管理EMR集群安全组。
DataWorks环境准备
在DataWorks上开发前需要已开通DataWorks服务,详情请参见DataWorks准备工作。
步骤一:创建工作空间
如果在华东2(上海)区域已有工作空间,可以忽略该步骤,使用已有工作空间。
登录DataWorks控制台,在左上角切换地域至华东2(上海)。
单击左侧导航栏中的工作空间,进入空间列表页面,单击创建工作空间,创建标准模式空间(生产、开发环境隔离),详情请参见创建工作空间。
步骤二:创建Serverless资源组
本教程在数据同步与调度时,需要使用DataWorks的Serverless资源组,因此您需要先购买Serverless资源组,并完成前期的准备工作。
购买Serverless资源组。
登录DataWorks控制台,在顶部切换地域至华东2(上海),单击左侧导航栏的资源组,进入资源组列表页面。
单击新建资源组,在资源组购买页面,选择地域和可用区为华东2(上海)、设置资源组名称,其他参数可根据界面提示进行配置,完成后根据界面提示完成付款。Serverless资源组的计费说明请参见Serverless资源组计费。
如当前地域没有可用的VPC和交换机,请单击参数说明中对应的控制台链接前往创建。VPC和交换机的更多信息,请参见什么是专有网络。
将资源组绑定至DataWorks工作空间。
新购买的Serverless资源组需要绑定至工作空间,才能在后续操作中使用。
登录DataWorks控制台,在顶部切换地域至华东2(上海),找到购买的Serverless资源组,单击操作列的绑定工作空间,然后单击已创建的DataWorks工作空间后的绑定。
为资源组配置公网访问能力。
由于本教程使用的测试数据需要通过公网获取,资源组默认不具备公网访问能力,因此需要为资源组绑定的VPC配置公网NAT网关,添加EIP,使其与公开数据网络打通,从而获取数据。
登录专有网络-公网NAT网关控制台,在顶部菜单栏切换至华东2(上海)地域。
单击创建公网NAT网关,配置相关参数。以下为本示例所需配置的关键参数,未说明参数保持默认即可。
参数
取值
参数
取值
所属地域
华东2(上海)。
所属专有网络
选择资源组绑定的VPC和交换机。
您可以前往DataWorks管理控制台,切换地域后,在左侧导航栏单击资源组列表,找到已创建的资源组,然后单击操作列的网络设置,在数据调度 & 数据集成区域查看绑定专有网络和交换机。VPC和交换机的更多信息,请参见什么是专有网络。
关联交换机
访问模式
专有网络全通模式(SNAT)。
弹性公网IP实例
新购弹性公网IP。
关联角色创建
首次创建NAT网关时,需要创建服务关联角色,请单击创建关联角色。
单击立即购买,勾选服务协议后,单击立即开通,完成购买。
更多新增和使用Serverless资源组的操作指导请参见新增和使用Serverless资源组。
步骤三:注册EMR集群并完成资源组初始化
只有将集群注册至DataWorks,才可以在DataWorks上使用EMR集群。
进入EMR集群注册页面。
进入管理中心页面。
登录DataWorks控制台,切换地域至华东2(上海)后,单击左侧导航栏的 ,在下拉框中选择对应工作空间后单击进入管理中心。
单击左侧导航栏的集群管理,进入集群管理页面 ,单击注册集群按钮,选择注册集群类型为E-MapReduce。进入注册E-MapReduce集群页面。
注册EMR集群。
在注册E-MapReduce集群页面配置集群信息,关键参数配置信息如下。
参数
取值
参数
取值
集群所属云账号
当前阿里云主账号。
集群类型
数据湖(DataLake)。
默认访问身份
集群账号:hadoop。
传递proxy user信息
传递。
资源组初始化。
在集群管理页面,找到已注册的EMR集群,单击右上角的资源组初始化。
在需要初始化的资源组后面单击初始化。
完成后单击确认。
初始化资源组时,请务必确保初始化成功,否则可能导致任务运行失败。如果初始化失败,请根据界面提示查看失败原因并进行连通性诊断。
注册EMR集群的详细操作,请参见注册EMR集群至DataWorks。
提交EMR作业
步骤一:创建EMR Hive节点
进入数据开发页面。
登录DataWorks控制台,切换至目标地域后,单击左侧导航栏的 ,在下拉框中选择对应工作空间后单击进入数据开发。
新建EMR Hive节点。
右键单击目标业务流程,选择
。您也可以鼠标悬停至新建,选择
。在新建节点对话框中,输入名称,并选择引擎实例、节点类型及路径。单击确认,进入EMR Hive节点编辑页面。
节点名称支持大小写字母、中文、数字、下划线(_)和小数点(.)。
步骤二:开发EMR Hive任务
在EMR Hive节点编辑页面双击已创建的节点,进入任务开发页面,执行如下开发操作。
开发SQL代码
在SQL编辑区域开发任务代码,您可在代码中使用${变量名}的方式定义变量,并在节点编辑页面右侧导航栏的调度配置>调度参数中为该变量赋值。实现调度场景下代码的动态传参,调度参数使用详情,请参考调度参数支持的格式,示例如下。
show tables;
select '${var}'; --可以结合调度参数使用。
select * from userinfo ;
SQL语句最大不能超过130KB。
如果您工作空间的数据开发中绑定多个EMR计算资源,则需要根据业务需求选择合适的计算资源。如果仅绑定一个EMR,则无需选择。
如果您需要修改代码中的参数赋值,请单击界面上方工具栏的高级运行。参数赋值逻辑详情请参见运行,高级运行和开发环境冒烟测试赋值逻辑有什么区别。
执行SQL任务
如果您想修改提交作业的队列,请参见配置高级参数。
步骤三:配置节点调度
如您需要周期性执行创建的节点任务,可单击节点编辑页面右侧的调度配置,根据业务需求配置该节点任务的调度信息。配置详情请参见任务调度属性配置概述。
您需要设置节点的重跑属性和依赖的上游节点,才可以提交节点。
步骤四:发布节点任务
节点任务配置完成后,需执行提交发布操作,提交发布后节点即会根据调度配置内容进行周期性运行。
单击工具栏中的
图标,保存节点。
单击工具栏中的
图标,提交节点任务。
提交时需在提交对话框中输入变更描述,并根据需要选择是否在节点提交后执行代码评审。
您需设置节点的重跑属性和依赖的上游节点,才可提交节点。
代码评审可对任务的代码质量进行把控,防止由于任务代码有误,未经审核直接发布上线后出现任务报错。如进行代码评审,则提交的节点代码必须通过评审人员的审核才可发布,详情请参见代码评审。
如您使用的是标准模式的工作空间,任务提交成功后,需单击节点编辑页面右上方的发布,将该任务发布至生产环境执行,操作请参见发布任务。
步骤一:创建EMR Spark SQL节点
进入数据开发页面。
登录DataWorks控制台,切换至目标地域后,单击左侧导航栏的 ,在下拉框中选择对应工作空间后单击进入数据开发。
新建EMR Spark SQL节点。
右键单击目标业务流程,选择
。您也可以鼠标悬停至新建,选择
。在新建节点对话框中,输入名称,并选择引擎实例、节点类型及路径。单击确认,进入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,则无需选择。
执行SQL任务
如果您想修改提交作业的队列,请参见配置高级参数。
步骤三:配置节点调度
如您需要周期性执行创建的节点任务,可单击节点编辑页面右侧的调度配置,根据业务需求配置该节点任务的调度信息。配置详情请参见任务调度属性配置概述。
您需要设置节点的重跑属性和依赖的上游节点,才可以提交节点。
步骤四:发布节点任务
节点任务配置完成后,需执行提交发布操作,提交发布后节点即会根据调度配置内容进行周期性运行。
单击工具栏中的
图标,保存节点。
单击工具栏中的
图标,提交节点任务。
提交时需在提交对话框中输入变更描述,并根据需要选择是否在节点提交后执行代码评审。
您需设置节点的重跑属性和依赖的上游节点,才可提交节点。
代码评审可对任务的代码质量进行把控,防止由于任务代码有误,未经审核直接发布上线后出现任务报错。如进行代码评审,则提交的节点代码必须通过评审人员的审核才可发布,详情请参见代码评审。
如您使用的是标准模式的工作空间,任务提交成功后,需单击节点编辑页面右上方的发布,将该任务发布至生产环境执行,操作请参见发布任务。
步骤一:创建EMR Spark节点
进入数据开发页面。
登录DataWorks控制台,切换至目标地域后,单击左侧导航栏的 ,在下拉框中选择对应工作空间后单击进入数据开发。
新建EMR Spark节点。
右键单击目标业务流程,选择
。您也可以鼠标悬停至新建,选择
。在新建节点对话框中,输入名称,并选择引擎实例、节点类型及路径。单击确认,进入EMR Spark节点编辑页面。
节点名称支持大小写字母、中文、数字、下划线(_)和小数点(.)。
步骤二:开发Spark任务
在EMR Spark节点编辑页面双击已创建的节点,进入任务开发页面,您可以根据不同场景需求选择适合您的操作方案:
(推荐)先从本地上传资源至DataStudio,再引用资源。详情请参见方案一:先上传资源后引用EMR JAR资源。
使用OSS REF方式引用OSS资源,详情请参见方案二:直接引用OSS资源。
方案一:先上传资源后引用EMR JAR资源
DataWorks也支持您从本地先上传资源至DataStudio,再引用资源。EMR Spark任务编译完成后,您需获取编译后的JAR包,建议根据JAR包大小选择不同方式存储JAR包资源。
上传JAR包资源,创建为DataWorks的EMR资源并提交,或直接存储在EMR的HDFS存储中(EMR on ACK 类型的Spark集群及EMR Serverless Spark集群不支持上传资源到HDFS)。
创建EMR JAR资源。
JAR包小于200MB时,可将JAR包通过本地上传的方式上传为DataWorks的EMR JAR资源,便于后续在DataWorks控制台进行可视化管理,创建完成资源后需进行提交,操作详情请参见创建和使用EMR资源。
首次创建EMR资源时,如果您希望JAR包上传后存储在OSS中,您需要先参考界面提示进行授权操作。
引用EMR JAR资源。
双击创建的EMR Spark节点,打开EMR Spark 节点的代码编辑页面。
在
节点下,找到上述步骤中已上传的EMR JAR资源,右键选择引用资源。选择引用资源后,当前打开的EMR Spark节点的编辑页面会自动添加资源引用代码,引用代码示例如下。
##@resource_reference{"spark-examples_2.12-1.0.0-SNAPSHOT-shaded.jar"} spark-examples_2.12-1.0.0-SNAPSHOT-shaded.jar
如果成功自动添加上述引用代码,表明资源引用成功。其中,spark-examples_2.12-1.0.0-SNAPSHOT-shaded.jar为您实际上传的EMR JAR资源名称。
改写EMR Spark节点代码,补充spark submit命令,改写后的示例如下。
EMR Spark节点编辑代码时不支持注释语句,请务必参考如下示例改写任务代码,不要随意添加注释,否则后续运行节点时会报错。
##@resource_reference{"spark-examples_2.11-2.4.0.jar"} spark-submit --class org.apache.spark.examples.SparkPi --master yarn spark-examples_2.11-2.4.0.jar 100
其中:
org.apache.spark.examples.SparkPi:为您实际编译的JAR包中的任务主Class。
spark-examples_2.11-2.4.0.jar:为您实际上传的EMR JAR资源名称。
其他参数可参考以上示例不做修改,您也可执行以下命令查看
spark submit
的使用帮助,根据需要修改spark submit
命令。若您需要在Spark节点中使用
spark submit
命令简化的参数,您需要在代码中自行添加,例如,--executor-memory 2G
。Spark节点仅支持使用Yarn的Cluster提交作业。
spark submit
方式提交的任务,deploy-mode推荐使用cluster模式,不建议使用client模式。
spark-submit --help
创建EMR JAR资源。
JAR包大于等于200MB时,无法通过本地上传的方式直接上传为DataWorks的资源,建议直接将JAR包存储在EMR的HDFS中,并记录下JAR包的存储路径,以便后续在DataWorks调度Spark任务时引用该路径。
引用EMR JAR资源。
JAR包存储在HDFS时,您可以直接在EMR Spark节点中通过代码指定JAR包路径的方式引用JAR包。
双击创建的EMR Spark节点,打开EMR Spark 节点的代码编辑页面。
编写spark submit命令,示例如下。
spark-submit --master yarn --deploy-mode cluster --name SparkPi --driver-memory 4G --driver-cores 1 --num-executors 5 --executor-memory 4G --executor-cores 1 --class org.apache.spark.examples.JavaSparkPi hdfs:///tmp/jars/spark-examples_2.11-2.4.8.jar 100
其中:
hdfs:///tmp/jars/spark-examples_2.11-2.4.8.jar:为JAR包实际在HDFS中的路径。
org.apache.spark.examples.JavaSparkPi:为您实际编译的JAR包中的任务主class。
其他参数为实际EMR集群的参数,需根据实际情况进行修改配置。您也可以执行以下命令查看spark submit的使用帮助,根据需要修改spark submit命令。
若您需要在Spark节点中使用Spark-submit命令简化的参数,您需要在代码中自行添加,例如,
--executor-memory 2G
。Spark节点仅支持使用Yarn的Cluster提交作业。
spark-submit方式提交的任务,deploy-mode推荐使用cluster模式,不建议使用client模式。
spark-submit --help
(可选)配置高级参数
您可在节点高级设置处配置Spark特有属性参数。更多Spark属性参数设置,请参考Spark Configuration。不同类型EMR集群可配置的高级参数存在部分差异,具体如下表。
高级参数 | 配置说明 |
queue | 提交作业的调度队列,默认为default队列。 如果您在注册EMR集群至DataWorks工作空间时,配置了工作空间级的YARN资源队列:
关于EMR YARN说明,详情请参见队列基础配置,注册EMR集群时的队列配置详情请参见设置全局YARN资源队列。 |
priority | 优先级,默认为1。 |
FLOW_SKIP_SQL_ANALYZE | SQL语句执行方式。取值如下:
该参数仅支持用于数据开发环境测试运行流程。 |
USE_GATEWAY | 不支持。 |
其他 |
|
高级参数 | 配置说明 |
queue | 提交作业的调度队列,默认为default队列。 如果您在注册EMR集群至DataWorks工作空间时,配置了工作空间级的YARN资源队列:
关于EMR YARN说明,详情请参见队列基础配置,注册EMR集群时的队列配置详情请参见设置全局YARN资源队列。 |
priority | 优先级,默认为1。 |
FLOW_SKIP_SQL_ANALYZE | SQL语句执行方式。取值如下:
该参数仅支持用于数据开发环境测试运行流程。 |
USE_GATEWAY | 设置本节点提交作业时,是否通过Gateway集群提交。取值如下:
如果本节点所在的集群未关联Gateway集群,此处手动设置参数取值为 |
其他 |
|
高级参数 | 配置说明 |
queue | 不支持。 |
priority | 不支持。 |
FLOW_SKIP_SQL_ANALYZE | SQL语句执行方式。取值如下:
该参数仅支持用于数据开发环境测试运行流程。 |
USE_GATEWAY | 不支持。 |
其他 |
|
相关参数设置请参见提交Spark任务参数设置。
高级参数 | 配置说明 |
queue | 提交作业的调度队列,默认为dev_queue队列。 |
priority | 优先级,默认为1。 |
FLOW_SKIP_SQL_ANALYZE | SQL语句执行方式。取值如下:
该参数仅支持用于数据开发环境测试运行流程。 |
USE_GATEWAY | 不支持。 |
SERVERLESS_RELEASE_VERSION | Spark引擎版本,默认使用管理中心的集群管理中集群配置的默认引擎版本。如需为不同任务设置不同的引擎版本,您可在此进行设置。 |
SERVERLESS_QUEUE_NAME | 指定资源队列,默认使用管理中心的集群管理中集群配置的默认资源队列。如有资源隔离和管理需求,可通过添加队列实现。详情请参见管理资源队列。 |
其他 |
|
执行SQL任务
步骤三:配置节点调度
如您需要周期性执行创建的节点任务,可单击节点编辑页面右侧的调度配置,根据业务需求配置该节点任务的调度信息。配置详情请参见任务调度属性配置概述。
您需要设置节点的重跑属性和依赖的上游节点,才可以提交节点。
步骤四:发布节点任务
节点任务配置完成后,需执行提交发布操作,提交发布后节点即会根据调度配置内容进行周期性运行。
单击工具栏中的
图标,保存节点。
单击工具栏中的
图标,提交节点任务。
提交时需在提交对话框中输入变更描述,并根据需要选择是否在节点提交后执行代码评审。
您需设置节点的重跑属性和依赖的上游节点,才可提交节点。
代码评审可对任务的代码质量进行把控,防止由于任务代码有误,未经审核直接发布上线后出现任务报错。如进行代码评审,则提交的节点代码必须通过评审人员的审核才可发布,详情请参见代码评审。
如您使用的是标准模式的工作空间,任务提交成功后,需单击节点编辑页面右上方的发布,将该任务发布至生产环境执行,操作请参见发布任务。
后续操作
任务发布后将自动进入运维中心,您可在运维中心查看任务运行情况,或手动触发任务执行。详情请参见:运维中心。
常见问题
相关文档
- 本页导读 (1)
- 支持的集群类型
- 使用限制
- 前提条件
- 注意事项
- DataWorks环境准备
- 步骤一:创建工作空间
- 步骤二:创建Serverless资源组
- 步骤三:注册EMR集群并完成资源组初始化
- 提交EMR作业
- 后续操作
- 常见问题
- 相关文档