全部产品
Search
文档中心

云原生大数据计算服务 MaxCompute:运行模式

更新时间:Dec 26, 2023

MaxCompute Spark支持三种运行方式:Local模式、Cluster模式和DataWorks执行模式。

Local模式

MaxCompute Spark支持用户以原生Spark Local模式进行作业调试。

与Yarn Cluster模式类似,您首先需要做以下准备工作:

  1. 准备MaxCompute项目以及对应的AccessKey ID、AccessKey Secret。

  2. 下载MaxCompute Spark客户端。

  3. 准备环境变量。

  4. 配置spark-defaults.conf。

  5. 下载工程模版并编译。

上述操作更多信息,请参见搭建Linux开发环境

通过MaxCompute Spark客户端以Spark-Submit方式提交作业,代码示例如下:

## Java/Scala
cd $SPARK_HOME
./bin/spark-submit --master local[4] --class com.aliyun.odps.spark.examples.SparkPi \
/path/to/odps-spark-examples/spark-examples/target/spark-examples-2.0.0-SNAPSHOT-shaded.jar
## PySpark
cd $SPARK_HOME
./bin/spark-submit --master local[4] \
/path/to/odps-spark-examples/spark-examples/src/main/python/odps_table_rw.py

注意事项

  • Local模式读写MaxCompute表速度慢,是因为Local模式是通过Tunnel来读写的,读写速度相比于Yarn Cluster模式慢。

  • Local模式是在本地执行的,部分用户会经常遇到Local模式下可以访问VPC,但是在Yarn Cluster模式下无法访问VPC。

    Local模式是处于用户本机环境,网络没有隔离。而Yarn Cluster模式是处于MaxCompute的网络隔离环境中,必须要配置VPC访问相关参数。

  • Local模式下访问VPC的Endpoint通常是外网Endpoint,而Yarn Cluster模式下访问VPC的Endpoint通常是VPC网络Endpoint。更多Endpoint信息,请参见Endpoint

  • IDEA Local模式下需要将相关配置写入代码中,而在Yarn Cluster模式运行时一定要将这些配置从代码中删除。

IDEA Local模式执行

MaxCompute Spark支持用户在IDEA中以Local[N]的模式直接运行代码,而不需要通过MaxCompute Spark客户端提交,您需要注意以下两点:

  • 在IDEA中运行Local模式时,不能直接引用spark-defaults.conf的配置,需要手动在代码中指定相关配置。配置示例如下:

    val spark = SparkSession
          .builder()
          .appName("SparkPi")
          .config("spark.master", "local[4]") // 需设置spark.master为local[N]才能直接运行,N为并发数。
          .config("spark.hadoop.odps.project.name", "<project_name>")
          .config("spark.hadoop.odps.access.id", "<accesskey_id>")
          .config("spark.hadoop.odps.access.key", "<accesskey_secret>")
          .config("spark.hadoop.odps.end.point", "http://service.cn.maxcompute.aliyun.com/api")
          .config("spark.sql.catalogImplementation", "odps")
          .getOrCreate()
  • 务必注意需要在IDEA中手动添加MaxCompute Spark客户端的相关依赖(jars目录),否则会出现如下报错:

     the value of spark.sql.catalogimplementation should be one of hive in-memory but was odps

    您可以按照如下流程配置依赖:

    1. 在IDEA的顶部菜单栏,选择File > Project Structure项目设置

    2. Project StructureModules页面,选择目标Spark Module。单击右侧Dependencies后,在左下角单击增加图标,选择JARS or directories...选择

    3. 在打开的jars目录下,选择MaxCompute Spark版本及jars,单击OpenJAR

    4. 单击OKopen结果

    5. 通过IDEA提交作业。运行

Cluster模式

在Cluster模式中,您需要指定自定义程序入口main。main结束(Success or Fail)时,对应的Spark作业就会结束。使用场景适合于离线作业,可与阿里云DataWorks产品结合进行作业调度,命令行提交方式如下。

# /path/to/MaxCompute-Spark为编译后的Application JAR包路径。
cd $SPARK_HOME
bin/spark-submit --master yarn-cluster --class com.aliyun.odps.spark.examples.SparkPi \
/path/to/MaxCompute-Spark/spark-2.x/target/spark-examples_2.11-1.0.0-SNAPSHOT-shaded.jar

DataWorks执行模式

您可以在DataWorks中运行MaxCompute Spark离线作业(Cluster模式),以方便与其它类型执行节点集成和调度。

说明

DataWorks的Spark节点目前已经支持的Region:华东1(杭州)、华北2(北京)、华东2(上海)、华南1(深圳)、中国(香港)、美国西部1(硅谷)、欧洲中部1(法兰克福)、亚太南部1(孟买)、亚太东南1(新加坡)。

操作步骤如下:

  1. 您需要在DataWorks的业务流程中上传并提交(单击提交按钮)资源。

    上传成功如下图所示。

  2. 在创建的业务流程中,从数据开发组件中选择ODPS Spark节点。

  3. 双击工作流中的Spark节点,对Spark作业进行任务定义。ODPS Spark节点支持两种spark版本语言。选择不同的语言,会显示相应不同的配置。您可以根据界面提示进行配置,参数详情请参见开发ODPS Spark任务。其中:

    • 选择主jar资源:指定任务所使用的资源文件。此处的资源文件需要您提前上传至DataWorks上。

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

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

      除此之外,spark-defaults.conf中的配置需要逐条加到ODPS SPARK节点配置项中,例如Executor的数量、内存大小和spark.hadoop.odps.runtime.end.point的配置。

      ODPS SPARK节点的资源文件和配置项对应于spark-submit命令的参数和选项,如下表。此外,您也不需要上传spark-defaults.conf文件,而是将spark-defaults.conf文件中的配置都逐条加到ODPS SPARK节点配置项中。

      ODPS SPARK节点

      spark-submit

      主Java、Python资源

      app jar or python file

      配置项

      --conf PROP=VALUE

      Main Class

      --class CLASS_NAME

      参数

      [app arguments]

      选择JAR资源

      --jars JARS

      选择Python资源

      --py-files PY_FILES

      选择File资源

      --files FILES

      选择Archives资源

      --archives ARCHIVES

  4. 手动执行Spark节点,可以查看该任务的执行日志,从打印出来的日志中可以获取该任务的Logview和Jobview的URL,便于进一步查看与诊断。

    Spark作业定义完成后,即可在业务流程中对不同类型服务进行编排、统一调度执行。