集群模式

更新时间:
复制为 MD 格式

MaxCompute Spark支持将应用程序提交到MaxCompute分布式集群上运行,以利用云端强大的计算资源处理海量数据。

步骤一:下载并解压Spark客户端

  1. 点击链接或在终端输入如下指令下载并解压Spark客户端,示例为Spark3.1.1-odps0.47.0版本。

    wget https://odps-repo.oss-cn-hangzhou.aliyuncs.com/spark/3.1.1-odps0.47.0/spark-3.1.1-odps0.47.0-client.tar.gz
    tar zxvf spark-3.1.1-odps0.47.0-client.tar.gz
  2. 确认文件位置并已正确下载解压

    image

步骤二:设置环境变量

JAVA_HOME设置

# 推荐使用JDK 1.8
export JAVA_HOME=JAVA_PATH/jdk
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$JAVA_HOME/bin:$PATH

SPARK_HOME设置

# 下载上文提到的MaxCompute Spark客户端并解压到本地任意路径
export SPARK_HOME=SPARK_PATH
export PATH=$SPARK_HOME/bin:$PATH

HADOOP_CONF_DIR设置

Spark 2.4Spark 3.x必须要设置该参数。

export HADOOP_CONF_DIR=$SPARK_HOME/conf

步骤三:修改配置文件spark-defaults.conf

下载MaxCompute Spark客户端后,需要配置spark-defaults.conf,该文件位于$SPARK_HOME/conf/目录下。

  • 修改MaxCompute相关信息

    • spark.hadoop.odps.project.name :设置为运行任务的MaxCompute项目名

    • spark.hadoop.odps.access.id:设置为账号AccessId

    • spark.hadoop.odps.access.key: 设置为账号AccessKey

    • spark.hadoop.odps.end.point :设置为提交任务所需的MaxCompute Endpoint,按照MaxCompute项目所在地域配置,若任务Spark Client处于VPC环境,则需要设置为VPC Endpoint,否则需要设置为公网Endpoint,详情参考Endpoint

    • spark.hadoop.odps.runtime.end.point:设置为运行任务所需的MaxCompute Endpoint,按照MaxCompute项目所在地域配置云产品互联Endpoint,详情参考Endpoint

  • 确保使用Kube模式

    spark-defaults.conf中添加以下Kube模式配置:

    spark.hadoop.odps.kube.mode=true
    spark.hadoop.odps.cupid.data.proxy.enable=true
    spark.hadoop.odps.cupid.fuxi.shuffle.enable=true
    spark.hadoop.odps.spark.version=<根据具体的spark-version决定,不填写默认跟随client版本>
    spark.hadoop.odps.spark.libs.public.enable=true
    spark.eventLog.enabled=true
    spark.eventLog.dir=/workdir/eventlog/
  • 修改catalog信息

    注意:不同的Spark版本需要配置的参数不同。

    spark 3.x

    spark.sql.defaultCatalog=odps
    spark.sql.catalog.odps=org.apache.spark.sql.execution.datasources.v2.odps.OdpsTableCatalog 
    spark.sql.sources.partitionOverwriteMode=dynamic
    spark.sql.extensions=org.apache.spark.sql.execution.datasources.v2.odps.extension.OdpsExtensions

    spark 2.4.5

    spark.sql.catalogImplementation=hive

    spark 2.3.0

    spark.sql.catalogImplementation=odps

步骤四:准备项目工程

MaxCompute Spark提供了项目工程模板,建议开发者下载模板,复制后直接在模板里开发。

重要

为确保作业能正确使用集群的运行环境,模板中的Spark依赖范围(scope)已统一设置为 provided,请勿修改,否则将导致作业运行失败。

不同Spark版本模板及编译如下:

spark 3.x模板及编译

git clone https://github.com/aliyun/MaxCompute-Spark.git
cd spark-3.x
mvn clean package

spark 2.x模板及编译

git clone https://github.com/aliyun/MaxCompute-Spark.git
cd spark-2.x
mvn clean package

spark 1.x模板及编译

git clone https://github.com/aliyun/MaxCompute-Spark.git
cd spark-1.x
mvn clean package

步骤五:SparkPi冒烟测试

在完成上述步骤后,可以进行冒烟测试,验证MaxCompute Spark是否可以端到端执行成功。以spark-3.x为例,提交一个SparkPi来验证功能是否正常,提交命令如下:

# /path/to/MaxCompute-Spark 请指向正确的编译出来后的application jar包

# bash环境
cd $SPARK_HOME
bin/spark-submit \
--master yarn \
--deploy-mode cluster \
--class com.aliyun.odps.spark.examples.SparkPi \
{{SPARKPATH}}/MaxCompute-Spark/spark-3.x/target/spark-examples_2.12-1.0.0-SNAPSHOT-shaded.jar

# 在windows环境提交
cd $SPARK_HOME/bin
spark-submit.cmd --master yarn-cluster --class com.aliyun.odps.spark.examples.SparkPi ^
{{SPARKPATH}}\MaxCompute-Spark\spark-3.x\target\spark-examples_2.12-1.0.0-SNAPSHOT-shaded.jar

# 当看到以下日志则表明冒烟作业成功
26/01/29 19:36:07 INFO Client: 
	 client token: N/A
	 diagnostics: N/A
	 ApplicationMaster host: m***43
	 ApplicationMaster RPC port: 8088
	 queue: queue
	 start time: 1769686490830
	 final status: SUCCEEDED
说明

提交作业时,可使用--jars参数添加额外的JAR依赖,使用--py-files参数添加Python依赖文件。示例如下:

# 添加额外JAR依赖
bin/spark-submit --master yarn-cluster \
--jars path/to/dependency1.jar,path/to/dependency2.jar \
--class com.aliyun.odps.spark.examples.SparkPi \
/path/to/spark-examples_2.12-1.0.0-SNAPSHOT-shaded.jar

# 添加Python依赖文件
bin/spark-submit --master yarn-cluster \
--py-files path/to/dependency.py,path/to/package.zip \
/path/to/main.py