MaxCompute Spark支持将应用程序提交到MaxCompute分布式集群上运行,以利用云端强大的计算资源处理海量数据。
步骤一:下载并解压Spark客户端
点击链接或在终端输入如下指令下载并解压Spark客户端,示例为Spark
3.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确认文件位置并已正确下载解压

步骤二:设置环境变量
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.4和Spark 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.OdpsExtensionsspark 2.4.5
spark.sql.catalogImplementation=hivespark 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