通过阿里云DataWorks提交作业

更新时间:2025-03-21 05:40:54

阿里云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暂不支持执行EMRFlink任务。

  • 任务执行:DataWorks支持使用Serverless资源组(推荐)或旧版独享调度资源组进行EMR任务执行

  • 任务治理:

    • EMR Hive、EMR SparkEMR Spark SQL节点中SQL任务支持产出血缘关系。当集群版本为5.9.13.43.1及以上版本时,以上节点均支持查看表级血缘与字段级血缘。

      说明

      对于Spark类型节点,当EMR集群版本为5.8.03.42.0及以上版本时,支持查看表级血缘与字段级血缘,当EMR集群版本低于5.8.03.42.0版本时,仅Spark 2.x支持查看表级血缘。

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

  • 地域限制:目前仅华北3(张家口)地域支持使用EMR Serverless Spark。

  • 开启Kerberos认证的EMR集群的安全组需要对资源组绑定的交换机网段放开UDP协议端口的入权限。

    说明

    您需单击EMR集群基础信息集群安全组image图标,进入安全组详情页签,单击访问规则入方向,选择手动添加协议类型选择自定义UDP端口范围配置详情请查看EMR集群中的/etc/krb5.conf文件中对应的kdc端口,授权对象设置为资源组绑定的交换机网段。

前提条件

  • 已开通如下权限。

    仅拥有以下身份的RAM用户或RAM角色,可注册EMR集群,操作详情请参见RAM用户授权

    • 阿里云主账号。

    • 同时具有DataWorks空间管理员角色AliyunEMRFullAccess策略的RAM子账号或RAM角色。

    • 同时具有AliyunDataWorksFullAccessAliyunEMRFullAccess策略的RAM子账号或RAM角色。

  • 已购买对应类型EMR集群,本示例EMR集群地域为华东2(上海)

    DataWorks支持注册的集群类型,详情请参见支持的集群类型

注意事项

  • 若要实现DataWorks标准模式工作空间的开发环境与生产环境隔离机制,您需要为开发环境和生产环境注册两个不同的EMR集群。且这两个集群的元数据需要使用如下存储方式:

    • 方式一(数据湖方案推荐):存储在数据湖构建DLF(Data Lake Formation)的两个不同数据目录Catalog。详情请参见DLF统一元数据

    • 方式二:存储在阿里云关系型数据库RDS(Relational Database Service)的两个不同数据库Database。详情请参见配置自建RDS

  • 一个EMR集群可以注册在同一个阿里云账号的多个工作空间,但无法跨账号注册至多个工作空间。例如,某集群已注册至当前阿里云账号的工作空间,则该集群将无法跨账号再次被注册至其他阿里云账号的工作空间。

  • 为确保DataWorks资源组正常访问EMR集群,若DataWorks资源组绑定与EMR同一个专有网络和交换机后仍无法连接,请检查EMR集群安全组规则,添加对应交换机网段及常用开源组件的端口的入规则。具体操作请参见管理EMR集群安全组

DataWorks环境准备

DataWorks上开发前需要已开通DataWorks服务,详情请参见DataWorks准备工作

步骤一:创建工作空间

如果在华东2(上海)区域已有工作空间,可以忽略该步骤,使用已有工作空间。

  1. 登录DataWorks控制台,在左上角切换地域至华东2(上海)

  2. 单击左侧导航栏中的工作空间,进入空间列表页面,单击创建工作空间,创建标准模式空间(生产、开发环境隔离),详情请参见创建工作空间

步骤二:创建Serverless资源组

本教程在数据同步与调度时,需要使用DataWorksServerless资源组,因此您需要先购买Serverless资源组,并完成前期的准备工作。

  1. 购买Serverless资源组。

    1. 登录DataWorks控制台,在顶部切换地域至华东2(上海),单击左侧导航栏的资源组,进入资源组列表页面。

    2. 单击新建资源组,在资源组购买页面,选择地域和可用区华东2(上海)、设置资源组名称,其他参数可根据界面提示进行配置,完成后根据界面提示完成付款。Serverless资源组的计费说明请参见Serverless资源组计费

      说明

      如当前地域没有可用的VPC和交换机,请单击参数说明中对应的控制台链接前往创建。VPC和交换机的更多信息,请参见什么是专有网络

  2. 将资源组绑定至DataWorks工作空间。

    新购买的Serverless资源组需要绑定至工作空间,才能在后续操作中使用。

    登录DataWorks控制台,在顶部切换地域至华东2(上海),找到购买的Serverless资源组,单击操作列的绑定工作空间,然后单击已创建的DataWorks工作空间后的绑定

  3. 为资源组配置公网访问能力。

    由于本教程使用的测试数据需要通过公网获取,资源组默认不具备公网访问能力,因此需要为资源组绑定的VPC配置公网NAT网关,添加EIP,使其与公开数据网络打通,从而获取数据。

    1. 登录专有网络-公网NAT网关控制台,在顶部菜单栏切换至华东2(上海)地域。

    2. 单击创建公网NAT网关,配置相关参数。以下为本示例所需配置的关键参数,未说明参数保持默认即可。

      参数

      取值

      参数

      取值

      所属地域

      华东2(上海)。

      所属专有网络

      选择资源组绑定的VPC和交换机。

      您可以前往DataWorks管理控制台,切换地域后,在左侧导航栏单击资源组列表,找到已创建的资源组,然后单击操作列的网络设置,在数据调度 & 数据集成区域查看绑定专有网络交换机。VPC和交换机的更多信息,请参见什么是专有网络

      关联交换机

      访问模式

      专有网络全通模式(SNAT)。

      弹性公网IP实例

      新购弹性公网IP。

      关联角色创建

      首次创建NAT网关时,需要创建服务关联角色,请单击创建关联角色

    3. 单击立即购买,勾选服务协议后,单击立即开通,完成购买。

更多新增和使用Serverless资源组的操作指导请参见新增和使用Serverless资源组

步骤三:注册EMR集群并完成资源组初始化

只有将集群注册至DataWorks,才可以在DataWorks上使用EMR集群。

  1. 进入EMR集群注册页面。

    1. 进入管理中心页面。

      登录DataWorks控制台,切换地域至华东2(上海)后,单击左侧导航栏的更多 > 管理中心,在下拉框中选择对应工作空间后单击进入管理中心

    2. 单击左侧导航栏的集群管理,进入集群管理页面 ,单击注册集群按钮,选择注册集群类型E-MapReduce。进入注册E-MapReduce集群页面。

  2. 注册EMR集群。

    注册E-MapReduce集群页面配置集群信息,关键参数配置信息如下。

    参数

    取值

    参数

    取值

    集群所属云账号

    当前阿里云主账号

    集群类型

    数据湖(DataLake)

    默认访问身份

    集群账号:hadoop

    传递proxy user信息

    传递

  3. 资源组初始化。

    1. 集群管理页面,找到已注册的EMR集群,单击右上角的资源组初始化

    2. 在需要初始化的资源组后面单击初始化

    3. 完成后单击确认

    重要

    初始化资源组时,请务必确保初始化成功,否则可能导致任务运行失败。如果初始化失败,请根据界面提示查看失败原因并进行连通性诊断。

注册EMR集群的详细操作,请参见注册EMR集群至DataWorks

提交EMR作业

提交EMR Hive作业
提交EMR Spark SQL作业
提交EMR Spark作业

步骤一:创建EMR Hive节点

  1. 进入数据开发页面。

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

  2. 新建EMR Hive节点。

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

      说明

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

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

      说明

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

步骤二:开发EMR Hive任务

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

开发SQL代码

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

show tables;
select '${var}'; --可以结合调度参数使用。
select * from userinfo ;
说明
  • SQL语句最大不能超过130KB。

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

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

执行SQL任务

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

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

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

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

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

  3. (可选)冒烟测试。

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

说明

如果您想修改提交作业的队列,请参见配置高级参数

步骤三:配置节点调度

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

说明

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

步骤四:发布节点任务

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

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

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

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

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

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

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

步骤一:创建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,则无需选择。

执行SQL任务

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

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

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

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

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

  3. (可选)冒烟测试。

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

说明

如果您想修改提交作业的队列,请参见配置高级参数

步骤三:配置节点调度

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

说明

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

步骤四:发布节点任务

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

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

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

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

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

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

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

步骤一:创建EMR Spark节点

  1. 进入数据开发页面。

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

  2. 新建EMR Spark节点。

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

      说明

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

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

      说明

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

步骤二:开发Spark任务

EMR Spark节点编辑页面双击已创建的节点,进入任务开发页面,您可以根据不同场景需求选择适合您的操作方案:

方案一:先上传资源后引用EMR JAR资源

DataWorks也支持您从本地先上传资源至DataStudio,再引用资源。EMR Spark任务编译完成后,您需获取编译后的JAR包,建议根据JAR包大小选择不同方式存储JAR包资源。

上传JAR包资源,创建为DataWorksEMR资源并提交,或直接存储在EMRHDFS存储中(EMR on ACK 类型的Spark集群及EMR Serverless Spark集群不支持上传资源到HDFS)。

JAR包小于200MB时
JAR包大于等于200MB时
  1. 创建EMR JAR资源。

    JAR包小于200MB时,可将JAR包通过本地上传的方式上传为DataWorksEMR JAR资源,便于后续在DataWorks控制台进行可视化管理,创建完成资源后需进行提交,操作详情请参见创建和使用EMR资源

    image.png

    说明

    首次创建EMR资源时,如果您希望JAR包上传后存储在OSS中,您需要先参考界面提示进行授权操作。

  2. 引用EMR JAR资源。

    1. 双击创建的EMR Spark节点,打开EMR Spark 节点的代码编辑页面。

    2. EMR > 资源节点下,找到上述步骤中已上传的EMR JAR资源,右键选择引用资源

    3. 选择引用资源后,当前打开的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资源名称。

    4. 改写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节点仅支持使用YarnCluster提交作业。

        • spark submit方式提交的任务,deploy-mode推荐使用cluster模式,不建议使用client模式。

        spark-submit --help

        image.png

  1. 创建EMR JAR资源。

    JAR包大于等于200MB时,无法通过本地上传的方式直接上传为DataWorks的资源,建议直接将JAR包存储在EMRHDFS中,并记录下JAR包的存储路径,以便后续在DataWorks调度Spark任务时引用该路径。

  2. 引用EMR JAR资源。

    JAR包存储在HDFS时,您可以直接在EMR Spark节点中通过代码指定JAR包路径的方式引用JAR包。

    1. 双击创建的EMR Spark节点,打开EMR Spark 节点的代码编辑页面。

    2. 编写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节点仅支持使用YarnCluster提交作业。

        • spark-submit方式提交的任务,deploy-mode推荐使用cluster模式,不建议使用client模式。

        spark-submit --help

        image.png

方案二:直接引用OSS资源

当前节点可直接通过OSS REF的方式引用OSS资源,在运行EMR节点时,DataWorks会自动加载代码中的OSS资源至本地使用。该方式常用于“需要在EMR任务中运行JAR依赖”、“EMR任务需依赖脚本”等场景。

  1. 开发JAR资源。

    1. 代码依赖准备。

      您可前往EMR集群,在集群master节点的/usr/lib/emr/spark-current/jars/路径下查看您所需的代码依赖。下面以Spark3.4.2版本为例,您需在打开已创建的IDEA项目添加pom依赖并引用相关插件。

      添加pom依赖
      引用相关插件
      <dependencies>
              <dependency>
                  <groupId>org.apache.spark</groupId>
                  <artifactId>spark-core_2.12</artifactId>
                  <version>3.4.2</version>
              </dependency>
              <!-- Apache Spark SQL -->
              <dependency>
                  <groupId>org.apache.spark</groupId>
                  <artifactId>spark-sql_2.12</artifactId>
                  <version>3.4.2</version>
              </dependency>
      </dependencies>
      <build>
              <sourceDirectory>src/main/scala</sourceDirectory>
              <testSourceDirectory>src/test/scala</testSourceDirectory>
              <plugins>
                  <plugin>
                      <groupId>org.apache.maven.plugins</groupId>
                      <artifactId>maven-compiler-plugin</artifactId>
                      <version>3.7.0</version>
                      <configuration>
                          <source>1.8</source>
                          <target>1.8</target>
                      </configuration>
                  </plugin>
                  <plugin>
                      <artifactId>maven-assembly-plugin</artifactId>
                      <configuration>
                          <descriptorRefs>
                              <descriptorRef>jar-with-dependencies</descriptorRef>
                          </descriptorRefs>
                      </configuration>
                      <executions>
                          <execution>
                              <id>make-assembly</id>
                              <phase>package</phase>
                              <goals>
                                  <goal>single</goal>
                              </goals>
                          </execution>
                      </executions>
                  </plugin>
                  <plugin>
                      <groupId>net.alchim31.maven</groupId>
                      <artifactId>scala-maven-plugin</artifactId>
                      <version>3.2.2</version>
                      <configuration>
                          <recompileMode>incremental</recompileMode>
                      </configuration>
                      <executions>
                          <execution>
                              <goals>
                                  <goal>compile</goal>
                                  <goal>testCompile</goal>
                              </goals>
                              <configuration>
                                  <args>
                                      <arg>-dependencyfile</arg>
                                      <arg>${project.build.directory}/.scala_dependencies</arg>
                                  </args>
                              </configuration>
                          </execution>
                      </executions>
                  </plugin>
              </plugins>
          </build>
    2. 编写代码示例。

      package com.aliyun.emr.example.spark
      
      import org.apache.spark.sql.SparkSession
      
      object SparkMaxComputeDemo {
        def main(args: Array[String]): Unit = {
          // 创建 SparkSession
          val spark = SparkSession.builder()
            .appName("HelloDataWorks")
            .getOrCreate()
      
          // 打印Spark版本
          println(s"Spark version: ${spark.version}")
        }
      }
    3. 将代码打包成JAR文件。

      编辑保存Scala代码后,将Scala代码打包成JAR文件。示例生成的JAR包为SparkWorkOSS-1.0-SNAPSHOT-jar-with-dependencies.jar

  2. 上传JAR资源。

    1. 完成代码开发后,您需登录OSS管理控制台,单击所在地域左侧导航栏的Bucket列表

    2. 单击目标Bucket名称,进入文件管理页面。

      本文示例使用的Bucketonaliyun-bucket-2

    3. 单击新建目录,创建JAR资源的存放目录。

      配置目录名emr/jars,创建JAR资源的存放目录。

    4. 上传JAR资源至JAR资源的存放目录。

      进入存放目录,单击上传文件,在待上传文件区域单击扫描文件,添加SparkWorkOSS-1.0-SNAPSHOT-jar-with-dependencies.jar文件至Bucket,单击上传文件

  3. 引用JAR资源。

    1. 编辑引用JAR资源代码。

      在已创建的EMR Spark节点编辑页面,编辑引用JAR资源代码。

      spark-submit --class com.aliyun.emr.example.spark.SparkMaxComputeDemo --master yarn ossref://onaliyun-bucket-2/emr/jars/SparkWorkOSS-1.0-SNAPSHOT-jar-with-dependencies.jar

      引用参数说明:

      参数

      参数说明

      class

      运行的主类全名称。

      master

      Spark应用程序的运行模式。

      ossref文件路径

      格式为ossref://{endpoint}/{bucket}/{object}

      • endpoint:OSS对外服务的访问域名。Endpoint为空时,仅支持使用与当前访问的EMR集群同地域的OSS,即OSSBucket需要与EMR集群所在地域相同。

      • Bucket:OSS用于存储对象的容器,每一个Bucket有唯一的名称,登录OSS管理控制台,可查看当前登录账号下所有Bucket

      • object:存储在Bucket中的一个具体的对象(文件名称或路径)。

    2. 运行EMR Spark节点任务。

      编辑完成后您可单击image图标,选择您所创建的Serverless资源组运行EMR Spark节点。待任务执行完成后,记录控制台打印的applicationIds,例如application_1730367929285_xxxx

    3. 结果查看。

      创建EMR Shell节点并在EMR Shell节点执行yarn logs -applicationId application_1730367929285_xxxx命令查看运行结果:

      image

(可选)配置高级参数

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

DataLake集群/自定义集群:EMR on ECS
Hadoop集群:EMR on ECS
Spark集群:EMR ON ACK
EMR Serverless Spark集群

高级参数

配置说明

queue

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

如果您在注册EMR集群至DataWorks工作空间时,配置了工作空间级的YARN资源队列

  • 如果勾选全局配置是否优先,则实际Spark任务运行时,队列以注册EMR集群时的配置结果为准。

  • 如果未勾选,则实际Spark任务运行时,队列以EMR Spark节点的配置结果为准。

关于EMR YARN说明,详情请参见队列基础配置,注册EMR集群时的队列配置详情请参见设置全局YARN资源队列

priority

优先级,默认为1。

FLOW_SKIP_SQL_ANALYZE

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

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

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

说明

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

USE_GATEWAY

不支持。

其他

  • 您可以直接在高级配置里追加自定义SPARK参数。例如, spark.eventLog.enabled : false ,DataWorks会自动在最终下发EMR集群的代码中进行补全,格式为:--conf key=value

  • 还支持配置全局Spark参数,详情请参见设置全局Spark参数

高级参数

配置说明

queue

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

如果您在注册EMR集群至DataWorks工作空间时,配置了工作空间级的YARN资源队列

  • 如果勾选全局配置是否优先,则实际Spark任务运行时,队列以注册EMR集群时的配置结果为准。

  • 如果未勾选,则实际Spark任务运行时,队列以EMR Spark节点的配置结果为准。

关于EMR YARN说明,详情请参见队列基础配置,注册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参数。例如, spark.eventLog.enabled : false ,DataWorks会自动在最终下发EMR集群的代码中进行补全,格式为:--conf key=value

  • 还支持配置全局Spark参数,详情请参见设置全局Spark参数

高级参数

配置说明

queue

不支持。

priority

不支持。

FLOW_SKIP_SQL_ANALYZE

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

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

  • false:表示每次执行一条SQL语句。

说明

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

USE_GATEWAY

不支持。

其他

  • 您可以直接在高级配置里追加自定义SPARK参数。例如, spark.eventLog.enabled : false ,DataWorks会自动在最终下发EMR集群的代码中进行补全,格式为:--conf key=value

  • 还支持配置全局Spark参数,详情请参见设置全局Spark参数

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

高级参数

配置说明

queue

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

priority

优先级,默认为1。

FLOW_SKIP_SQL_ANALYZE

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

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

  • false:表示每次执行一条SQL语句。

说明

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

USE_GATEWAY

不支持。

SERVERLESS_RELEASE_VERSION

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

SERVERLESS_QUEUE_NAME

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

其他

  • 您可以直接在高级配置里追加自定义SPARK参数。例如, spark.eventLog.enabled : false ,DataWorks会自动在最终下发EMR集群的代码中进行补全,格式为:--conf key=value

  • 还支持配置全局Spark参数,详情请参见设置全局Spark参数

执行SQL任务

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

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

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

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

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

  3. (可选)冒烟测试。

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

步骤三:配置节点调度

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

说明

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

步骤四:发布节点任务

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

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

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

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

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

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

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

后续操作

任务发布后将自动进入运维中心,您可在运维中心查看任务运行情况,或手动触发任务执行。详情请参见:运维中心

常见问题

  • 在准备好DataWorks环境后,提交EMR Hive作业,出现了java.net.ConnectException: Connection timed out (Connection timed out)错误。

    • 请检查EMR集群和DataWorks环境是否根据文档要求进行了正确配置,并确认DataWorks资源组与EMR是否绑定在同一专有网络和交换机下。

    • 请检查EMR集群的安全组规则,确保开放ECS10000端口,具体操作请参见管理安全组。在DataWorks中提交其他组件作业时,需要开放相应的ECS端口。请参见开源组件常用端口

相关文档

  • 如果您的任务需要周期性调度运行,您需定义该任务的调度相关属性,包括调度周期、调度依赖、调度参数等。请参见节点调度配置

  • 如果您的任务需要复杂的字符串处理、数学运算,您可以在DataWorks上自定义函数。请参见创建EMR函数

  • 本页导读 (1)
  • 支持的集群类型
  • 使用限制
  • 前提条件
  • 注意事项
  • DataWorks环境准备
  • 步骤一:创建工作空间
  • 步骤二:创建Serverless资源组
  • 步骤三:注册EMR集群并完成资源组初始化
  • 提交EMR作业
  • 后续操作
  • 常见问题
  • 相关文档