MaxCompute Spark节点

更新时间:2025-02-05 09:50:35

Spark on MaxCompute作业可通过Local模式、Cluster模式执行,此外,您也可在DataWorks中运行Spark on MaxCompute离线作业(Cluster模式),以便与其它类型执行节点集成和调度。本文为您介绍如何通过DataWorks实现Spark on MaxCompute作业的配置与调度。

前提条件

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

    说明

    如果您使用的是主账号,则忽略该添加操作。

  • 已开发创建项目目录,详情请参见项目目录

  • 已创建MaxCompute Spark节点,详情请参见创建任务节点

使用限制

MaxCompute Spark节点选择Spark3.x版本时,若提交节点报错,请购买使用Serverless资源组,详情请参见新增和使用Serverless资源组

背景信息

Spark on MaxComputeMaxCompute提供的兼容开源Spark的计算服务。它在统一的计算资源和数据集权限体系基础上,提供Spark计算框架,支持您以熟悉的开发使用方式提交运行Spark作业,满足更丰富的数据处理分析需求。在DataWorks中,您可通过MaxCompute Spark节点实现Spark on MaxCompute任务的调度运行,以及与其他作业的集成操作。

Spark on MaxCompute支持使用Java、ScalaPython语言进行开发,并通过Local、Cluster模式运行任务,在DataWorks中运行Spark on MaxCompute离线作业时采用Cluster模式执行。更多关于Spark on MaxCompute运行模式的介绍,详情请参见运行模式

准备工作

MaxCompute Spark节点支持使用Java/ScalaPython语言运行Spark on MaxCompute离线作业,不同语言开发步骤及配置界面存在差异,您可根据业务需要选择使用。

Java/Scala
Python(使用默认Python环境实现)
Python(使用自定义Python环境实现)

MaxCompute Spark节点执行JavaScala语言类型代码前,您需先在本地开发好Spark on MaxCompute作业代码,再通过DataWorks上传为MaxCompute的资源。步骤如下:

  1. 准备开发环境。

    根据所使用系统类型,准备运行Spark on MaxCompute任务的开发环境,详情请参见搭建Linux开发环境搭建Windows开发环境

  2. 开发Java/Scala代码。

    MaxCompute Spark节点执行JavaScala语言类型代码前,需先在本地或已有环境开发好Spark on MaxCompute代码,建议使用Spark on MaxCompute提供的项目示例工程模板进行开发。

  3. 打包代码并上传至DataWorks。

    代码开发完成后,需将其打包,并通过DataWorks上传为MaxCompute资源,详情请参见资源管理

DataWorks可通过将代码在线写入DataWorks Python资源的方式,实现PySpark作业开发,并通过MaxCompute Spark节点提交运行该代码逻辑。DataWorks上创建Python资源。PySpark开发示例,详情请参见PySpark开发示例

说明

该方式使用DataWorks提供的默认Python环境,可直接依赖的第三方包有限,若默认环境无法满足PySpark作业第三方依赖包的需求,可参考下文《开发语言:Python(使用自定义Python环境实现)》方式,自行准备Python环境执行任务。当然,您也可选择对Python资源支持性更好的PyODPS 2节点和PyODPS 3节点。

若平台提供的默认Python环境无法满足您的业务需求,则可根据如下步骤自定义Python环境,执行Spark on MaxCompute任务。

  1. 本地准备Python环境。

    您可参考PySpark Python版本和依赖支持,根据业务需要配置可用的Python环境。

  2. 打包环境并上传至DataWorks。

    Python环境压缩为一个Zip包,并通过DataWorks上传为MaxCompute资源,作为后续运行Spark on MaxCompute任务的执行环境。

配置项说明

DataWorks运行Spark on MaxCompute离线作业采用Cluster模式,在Cluster模式中,您需指定自定义程序入口mainmain运行结束(即状态为SuccessFail)时,对应的Spark作业便会结束。此外,spark-defaults.conf中的配置需逐条添加到MaxCompute Spark节点配置项中。例如,Executor的数量、内存大小和spark.hadoop.odps.runtime.end.point的配置。

说明

您无需上传spark-defaults.conf文件,而是需将spark-defaults.conf文件中的配置逐条添加到MaxCompute Spark节点的配置项中。

JAVA/Scala语言配置
Python语言配置

image

参数

描述

对应的spark-submit命令

spark版本

包括Spark1.xSpark2.xSpark3.x版本。

说明

MaxCompute Spark节点选择Spark3.x版本时,若提交节点报错,请购买使用Serverless资源组,详情请参见新增和使用Serverless资源组

语言

此处选择Java/ScalaPython。请根据实际Spark on MaxCompute开发语言进行选择。

选择主Jar资源

指定任务所使用的主JAR资源文件或主Python资源。

此处的资源文件需提前上传至DataWorks并已提交,详情请参见资源管理

app jar or Python file

配置项

指定提交作业时的配置项。其中:

  • spark.hadoop.odps.access.idspark.hadoop.odps.access.keyspark.hadoop.odps.end.point无需配置,默认为MaxCompute项目的值(如有特殊原因可显式配置,将覆盖默认值)。

  • 您无需上传spark-defaults.conf文件,而是需将spark-defaults.conf中的配置逐条添加到MaxCompute Spark节点配置项中,例如Executor的数量、内存大小和spark.hadoop.odps.runtime.end.point的配置。

--conf PROP=VALUE

Main Class

配置主类名称。当开发语言为Java/Scala时,需要配置该参数。

--class CLASS_NAME

参数

您可根据需要添加参数,多个参数之间用空格分隔。DataWorks支持使用调度参数,此处参数配置格式为${变量名}。配置完成后需在右侧导航栏调度配置里,在调度参数处给变量赋值。

调度参数支持的赋值格式请参见调度参数支持格式

[app arguments]

选择Jar资源

仅支持开发语言为Java/Scala时使用。

此处的资源文件需提前上传至DataWorks并已提交,详情请参见资源管理

资源命令:

--jars JARS

选择File资源

file资源。

--files FILES

选择Archives资源

仅展示压缩类型的资源。

--archives ARCHIVES

image

参数

描述

对应的spark-submit命令

spark版本

包括Spark1.xSpark2.xSpark3.x版本。

说明

MaxCompute Spark节点选择Spark3.x版本时,若提交节点报错,请购买使用Serverless资源组,详情请参见新增和使用Serverless资源组

语言

此处选择Python。请根据实际Spark on MaxCompute开发语言进行选择。

选择主Python资源

指定任务所使用的主JAR资源文件或主Python资源。

此处的资源文件需提前上传至DataWorks并已提交,详情请参见资源管理

app jar or Python file

配置项

指定提交作业时的配置项。其中:

  • spark.hadoop.odps.access.idspark.hadoop.odps.access.keyspark.hadoop.odps.end.point无需配置,默认为MaxCompute项目的值(如有特殊原因可显式配置,将覆盖默认值)。

  • 您无需上传spark-defaults.conf文件,而是需将spark-defaults.conf中的配置逐条添加到MaxCompute Spark节点配置项中,例如Executor的数量、内存大小和spark.hadoop.odps.runtime.end.point的配置。

--conf PROP=VALUE

参数

您可根据需要添加参数,多个参数之间用空格分隔。DataWorks支持使用调度参数,此处参数配置格式为${变量名}。配置完成后需在右侧导航栏调度配置里,在调度参数处给变量赋值。

调度参数支持的赋值格式请参见调度参数支持格式

[app arguments]

选择Python资源

仅支持开发语言为Python时使用。

此处的资源文件需提前上传至DataWorks并已提交,详情请参见资源管理

--py-files PY_FILES

选择File资源

file资源。

--files FILES

选择Archives资源

仅展示压缩类型的资源。

--archives ARCHIVES

操作步骤

  1. 创建资源。

    1. 找到数据开发页面左侧导航栏的资源管理,单击新建,选择新建MaxCompute Spark类型的Python资源,并命名为spark_is_number.py,详情请参见资源管理。代码如下:

      # -*- coding: utf-8 -*-
      import sys
      from pyspark.sql import SparkSession
      
      try:
          # for python 2
          reload(sys)
          sys.setdefaultencoding('utf8')
      except:
          # python 3 not needed
          pass
      
      if __name__ == '__main__':
          spark = SparkSession.builder\
              .appName("spark sql")\
              .config("spark.sql.broadcastTimeout", 20 * 60)\
              .config("spark.sql.crossJoin.enabled", True)\
              .config("odps.exec.dynamic.partition.mode", "nonstrict")\
              .config("spark.sql.catalogImplementation", "odps")\
              .getOrCreate()
      
      def is_number(s):
          try:
              float(s)
              return True
          except ValueError:
              pass
      
          try:
              import unicodedata
              unicodedata.numeric(s)
              return True
          except (TypeError, ValueError):
              pass
      
          return False
      
      print(is_number('foo'))
      print(is_number('1'))
      print(is_number('1.3'))
      print(is_number('-1.37'))
      print(is_number('1e3'))
    2. 保存资源。

  2. 在已创建的MaxCompute Spark节点中,配置节点参数和调度配置参数,详情请参见配置项说明

  3. 如需定期执行节点任务,请根据业务需求配置调度信息,详情请参见调度配置

  4. 节点任务配置完成后,需对节点进行发布,详情请参见节点发布

  5. 任务发布后,您可以在运维中心查看周期任务的运行情况。详情请参见运维中心入门

    说明
    • 由于数据开发中的MaxCompute Spark节点没有运行入口,因此您需要在开发环境的运维中心执行Spark任务。

    • 待补数据实例运行成功后,进入其运行日志的tracking URL中查看运行结果

相关文档

  • 本页导读 (1)
  • 前提条件
  • 使用限制
  • 背景信息
  • 准备工作
  • 配置项说明
  • 操作步骤
  • 相关文档
AI助理

点击开启售前

在线咨询服务

你好,我是AI助理

可以解答问题、推荐解决方案等