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 MaxCompute是MaxCompute提供的兼容开源Spark的计算服务。它在统一的计算资源和数据集权限体系基础上,提供Spark计算框架,支持您以熟悉的开发使用方式提交运行Spark作业,满足更丰富的数据处理分析需求。在DataWorks中,您可通过MaxCompute Spark节点实现Spark on MaxCompute任务的调度运行,以及与其他作业的集成操作。
Spark on MaxCompute支持使用Java、Scala和Python语言进行开发,并通过Local、Cluster模式运行任务,在DataWorks中运行Spark on MaxCompute离线作业时采用Cluster模式执行。更多关于Spark on MaxCompute运行模式的介绍,详情请参见运行模式。
准备工作
MaxCompute Spark节点支持使用Java/Scala
和Python
语言运行Spark on MaxCompute离线作业,不同语言开发步骤及配置界面存在差异,您可根据业务需要选择使用。
在MaxCompute Spark节点执行Java或Scala语言类型代码前,您需先在本地开发好Spark on MaxCompute作业代码,再通过DataWorks上传为MaxCompute的资源。步骤如下:
准备开发环境。
根据所使用系统类型,准备运行Spark on MaxCompute任务的开发环境,详情请参见搭建Linux开发环境、搭建Windows开发环境。
开发Java/Scala代码。
在MaxCompute Spark节点执行Java或Scala语言类型代码前,需先在本地或已有环境开发好Spark on MaxCompute代码,建议使用Spark on MaxCompute提供的项目示例工程模板进行开发。
打包代码并上传至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任务。
本地准备Python环境。
您可参考PySpark Python版本和依赖支持,根据业务需要配置可用的Python环境。
打包环境并上传至DataWorks。
将Python环境压缩为一个Zip包,并通过DataWorks上传为MaxCompute资源,作为后续运行Spark on MaxCompute任务的执行环境。
配置项说明
DataWorks运行Spark on MaxCompute离线作业采用Cluster模式,在Cluster模式中,您需指定自定义程序入口main
。main
运行结束(即状态为Success
或Fail
)时,对应的Spark作业便会结束。此外,spark-defaults.conf
中的配置需逐条添加到MaxCompute Spark节点配置项中。例如,Executor
的数量、内存大小和spark.hadoop.odps.runtime.end.point
的配置。
您无需上传spark-defaults.conf
文件,而是需将spark-defaults.conf
文件中的配置逐条添加到MaxCompute Spark节点的配置项中。
参数 | 描述 | 对应的spark-submit命令 |
spark版本 | 包括Spark1.x、Spark2.x、Spark3.x版本。 当MaxCompute Spark节点选择Spark3.x版本时,若提交节点报错,请购买使用Serverless资源组,详情请参见新增和使用Serverless资源组。 | — |
语言 | 此处选择Java/Scala或Python。请根据实际Spark on MaxCompute开发语言进行选择。 | — |
选择主Jar资源 | 指定任务所使用的主JAR资源文件或主Python资源。 此处的资源文件需提前上传至DataWorks并已提交,详情请参见资源管理。 |
|
配置项 | 指定提交作业时的配置项。其中:
|
|
Main Class | 配置主类名称。当开发语言为 |
|
参数 | 您可根据需要添加参数,多个参数之间用空格分隔。DataWorks支持使用调度参数,此处参数配置格式为 调度参数支持的赋值格式请参见调度参数支持格式。 |
|
选择Jar资源 | 仅支持开发语言为 此处的资源文件需提前上传至DataWorks并已提交,详情请参见资源管理。 | 资源命令:
|
选择File资源 | file资源。 |
|
选择Archives资源 | 仅展示压缩类型的资源。 |
|
参数 | 描述 | 对应的spark-submit命令 |
spark版本 | 包括Spark1.x、Spark2.x、Spark3.x版本。 当MaxCompute Spark节点选择Spark3.x版本时,若提交节点报错,请购买使用Serverless资源组,详情请参见新增和使用Serverless资源组。 | — |
语言 | 此处选择Python。请根据实际Spark on MaxCompute开发语言进行选择。 | — |
选择主Python资源 | 指定任务所使用的主JAR资源文件或主Python资源。 此处的资源文件需提前上传至DataWorks并已提交,详情请参见资源管理。 |
|
配置项 | 指定提交作业时的配置项。其中:
|
|
参数 | 您可根据需要添加参数,多个参数之间用空格分隔。DataWorks支持使用调度参数,此处参数配置格式为 调度参数支持的赋值格式请参见调度参数支持格式。 |
|
选择Python资源 | 仅支持开发语言为 此处的资源文件需提前上传至DataWorks并已提交,详情请参见资源管理。 |
|
选择File资源 | file资源。 |
|
选择Archives资源 | 仅展示压缩类型的资源。 |
|
操作步骤
创建资源。
找到数据开发页面左侧导航栏的资源管理,单击新建,选择新建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'))
保存资源。
在已创建的MaxCompute Spark节点中,配置节点参数和调度配置参数,详情请参见配置项说明。
如需定期执行节点任务,请根据业务需求配置调度信息,详情请参见调度配置。
节点任务配置完成后,需对节点进行发布,详情请参见节点发布。
任务发布后,您可以在运维中心查看周期任务的运行情况。详情请参见运维中心入门。
由于数据开发中的MaxCompute Spark节点没有运行入口,因此您需要在开发环境的运维中心执行Spark任务。
待补数据实例运行成功后,进入其运行日志的tracking URL中查看运行结果
相关文档
- 本页导读 (1)
- 前提条件
- 使用限制
- 背景信息
- 准备工作
- 配置项说明
- 操作步骤
- 相关文档