本文为您介绍如何在Windows操作系统下搭建MaxCompute Spark开发环境。
如果您安装了Linux操作系统,请前往搭建Linux开发环境。
前提条件
下载MaxCompute Spark客户端包
- Spark-1.6.3:适用于Spark1.x应用的开发。
- Spark-2.3.0:适用于Spark2.x应用的开发。
- Spark-2.4.5:适用于Spark2.x应用的开发。使用Spark-2.4.5的注意事项请参见Spark 2.4.5使用注意事项。
- Spark-3.1.1:适用于Spark3.x应用的开发。使用Spark-3.1.1的注意事项请参见Spark 3.1.1使用注意事项。
设置环境变量
- 配置Java环境变量。
- 获取Java安装路径。
- 编辑Java环境变量信息。
- 在系统变量中新增
JAVA_HOME
的变量,变量值输入Java安装路径。 - 系统变量
Path
中增加%JAVA_HOME%\bin
。
- 在系统变量中新增
- 确认Java已配置成功。
- 验证方式
通过键盘快捷键Win+R打开运行对话框,输入cmd,单击确定。在命令运行界面输入
java -version
,若返回的结果符合预期,则Java配置成功。 - 预期结果示例
java version "1.8.0_361" Java(TM) SE Runtime Environment (build 1.8.0_361-b09) Java HotSpot(TM) 64-Bit Server VM (build 25.361-b09, mixed mode)
- 验证方式
- 配置Spark环境变量。
- 获取Spark客户端包解压后的路径。
- 编辑Spark环境变量信息。
- 新增
SPARK_HOME
系统变量,变量值中输入Spark客户端包解压后的路径。 - 系统变量
Path
中增加%SPARK_HOME%\bin
。
- 新增
- 配置Scala环境变量。确认Scala已配置成功。
- 验证方式
通过键盘快捷键Win+R打开运行对话框,输入cmd,单击确定。在命令运行界面输入
scala
,若返回的结果符合预期,则Scala配置成功。 - 预期结果示例
Welcome to Scala 2.13.10 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_361). Type in expressions for evaluation. Or try :help. scala>
- 验证方式
- 配置Python环境变量。
- 获取Python安装路径。
- 编辑Python环境变量信息。在系统变量
Path
中增加Python和子目录Scripts的安装路径。 - 确认Python已配置成功。
- 验证方式
通过键盘快捷键Win+R打开运行对话框,输入cmd,单击确定。在命令运行界面输入
python --version
,若返回的结果符合预期,则Python配置成功。 - 预期结果示例
Python 3.10.6
- 验证方式
- 配置Maven环境变量。
- 获取Maven包解压后的路径。
- 编辑Maven环境变量信息。
- 新增
MAVEN_HOME
系统变量,变量值中输入Maven包解压后的路径。 - 系统变量
Path
中增加%MAVEN_HOME%\bin
。
- 新增
- 确认Maven已配置成功。
- 验证方式
通过键盘快捷键Win+R打开运行对话框,输入cmd,单击确定。在命令运行界面输入
mvn --version
,若返回的结果符合预期,则Maven配置成功。 - 预期结果示例
# ***表示Maven包解压后的部分路径。 Apache Maven 3.8.7 (b89d5959fcde851dcb1c8946a785a163f14e1e29) Maven home: D:\***\apache-maven-3.8.7-bin\apache-maven-3.8.7 Java version: 1.8.0_361, vendor: Oracle Corporation, runtime: C:\Program Files\Java\jdk1.8.0_361\jre Default locale: zh_CN, platform encoding: GBK OS name: "windows 10", version: "10.0", arch: "amd64", family: "windows"
- 验证方式
- 配置Git环境变量。确认Git已配置成功。
- 验证方式
通过键盘快捷键Win+R打开运行对话框,输入cmd,单击确定。在命令运行界面输入
git --version
,若返回的结果符合预期,则Git配置成功。 - 预期结果示例
git version 2.39.1.windows.1
- 验证方式
- 配置spark_defaults.conf第一次使用MaxCompute Spark客户端时,请在Spark客户端包的解压路径下,将conf文件夹下的spark-defaults.conf.template文件重命名为spark-defaults.conf后再进行相关配置。如果spark-defaults.conf.template和spark-defaults.conf文件都存在,则不需要重命名操作,只需要配置spark-defaults.conf文件即可。代码示例如下。
# 直接进入到Spark客户端包的解压路径,并进入conf文件夹。请以实际路径为准。 # 打开spark-defaults.conf文件配置信息 # 在配置文件末尾添加如下配置信息。 spark.hadoop.odps.project.name = <MaxCompute_project_name> spark.hadoop.odps.access.id = <AccessKey_id> spark.hadoop.odps.access.key = <AccessKey_secret> spark.hadoop.odps.end.point = <Endpoint> # Spark客户端连接访问MaxCompute项目的Endpoint,您可以根据自己情况进行修改。详情请参见Endpoint。 spark.hadoop.odps.runtime.end.point = <VPC_endpoint> # Spark运行环境Endpoint,所在Region的MaxCompute VPC网络的Endpoint。您可以根据自己情况进行修改。 # spark 2.3.0请将spark.sql.catalogImplementation设置为odps,spark 2.4.5请将spark.sql.catalogImplementation设置为hive。 spark.sql.catalogImplementation={odps|hive} # 如下参数配置保持不变 spark.hadoop.odps.task.major.version = cupid_v2 spark.hadoop.odps.cupid.container.image.enable = true spark.hadoop.odps.cupid.container.vm.engine.type = hyper spark.hadoop.odps.cupid.webproxy.endpoint = http://service.cn.maxcompute.aliyun-inc.com/api spark.hadoop.odps.moye.trackurl.host = http://jobview.odps.aliyun.com
- MaxCompute_project_name:待访问MaxCompute项目的名称。
此处为MaxCompute项目名称,非工作空间名称。您可以登录MaxCompute控制台,左上角切换地域后,即可在项目管理页签查看到具体的MaxCompute项目名称。
- AccessKey_id:具备目标MaxCompute项目访问权限的AccessKey ID。
您可以进入AccessKey管理页面获取AccessKey ID。
- AccessKey_secret:AccessKey ID对应的AccessKey Secret。
您可以进入AccessKey管理页面获取AccessKey Secret。
- Endpoint:MaxCompute项目所属区域的外网Endpoint。
各地域的外网Endpoint信息,请参见各地域Endpoint对照表(外网连接方式)。
- VPC_endpoint:MaxCompute项目所属区域的VPC网络的Endpoint。
各地域的VPC网络Endpoint信息,请参见各地域Endpoint对照表(阿里云VPC网络连接方式)。
- MaxCompute_project_name:待访问MaxCompute项目的名称。
准备项目工程
- 下载Spark-1.x模板并编译
#打开已经下载好的git客户端(Git Bash),进入到需要下载项目工程的目录,执行 git clone https://github.com/aliyun/MaxCompute-Spark.git #进入到工程文件夹中 cd MaxCompute-Spark/spark-1.x #编译该工程包 mvn clean package
- 下载Spark-2.x 模板并编译
#打开已经下载好的git客户端(Git Bash),进入到需要下载项目工程的目录,执行 git clone https://github.com/aliyun/MaxCompute-Spark.git #进入到工程文件夹中 cd MaxCompute-Spark/spark-2.x #编译该工程包 mvn clean package
- 下载Spark-3.x 模板并编译
#打开已经下载好的git客户端(Git Bash),进入到需要下载项目工程的目录,执行 git clone https://github.com/aliyun/MaxCompute-Spark.git #进入到工程文件夹中 cd MaxCompute-Spark/spark-3.x #编译该工程包 mvn clean package
上述命令执行完毕后,如果显示创建失败,说明环境配置有误,请按照上述配置指导仔细检查并修正环境配置信息。
配置依赖说明
在准备的MaxCompute Spark项目下,配置依赖信息。命令示例如下(您可在Git客户端继续执行,也可直接打开该文件进行修改)。
- 配置访问MaxCompute表所需的依赖。
- 使用Spark-1.x模板场景
# 进入spark-1.x文件夹。 cd MaxCompute-Spark/spark-1.x # 编辑Pom文件,添加odps-spark-datasource依赖。 <dependency> <groupId>com.aliyun.odps</groupId> <artifactId>odps-spark-datasource_2.10</artifactId> <version>3.3.8-public</version> </dependency>
- 使用Spark-2.x模板场景
# 进入spark-2.x文件夹。 cd MaxCompute-Spark/spark-2.x # 编辑Pom文件,添加odps-spark-datasource依赖。 <dependency> <groupId>com.aliyun.odps</groupId> <artifactId>odps-spark-datasource_2.11</artifactId> <version>3.3.8-public</version> </dependency>
- 使用Spark-1.x模板场景
- 配置访问OSS所需的依赖。 如果作业需要访问OSS,直接添加以下依赖即可。
<dependency> <groupId>com.aliyun.odps</groupId> <artifactId>hadoop-fs-oss</artifactId> <version>3.3.8-public</version> </dependency>
更多Spark-1.x、Spark-2.x以及Spark-3.x的依赖配置信息,请参见Spark-1.x pom文件、Spark-2.x pom文件和Spark-3.x pom文件。
SparkPi冒烟测试
# 通过键盘快捷键Win+R打开运行对话框,输入cmd。
# 进入到需要执行作业的D:\PC\spark\spark-2.4.5-odps0.33.2\bin目录下。
cd D:\PC\spark\spark-2.4.5-odps0.33.2\bin
#输入如下命令。
spark-submit --master yarn-cluster --class com.aliyun.odps.spark.examples.SparkPi \
spark-examples_2.11-1.0.0-SNAPSHOT-shaded.jar
# 当看到以下日志表明冒烟作业成功。
19/06/11 11:57:30 INFO Client:
client token: N/A
diagnostics: N/A
ApplicationMaster host: 11.222.166.90
ApplicationMaster RPC port: 38965
queue: queue
start time: 1560225401092
final status: SUCCEEDED
Spark 2.4.5使用注意事项
- 使用Spark 2.4.5提交作业
直接使用Yarn-cluster模式在本地提交任务。详情请参见Cluster模式。
- Spark 2.4.5使用变化
- 如果使用Yarn-cluster模式在本地提交任务,需要新增环境变量
HADOOP_CONF_DIR=$SPARK_HOME/conf
。 - 如果使用Local模式进行调试,需要在
$SPARK_HOME/conf
目录下新建odps.conf文件,并添加如下配置。odps.project.name = odps.access.id = odps.access.key = odps.end.point =
- 如果使用Yarn-cluster模式在本地提交任务,需要新增环境变量
- Spark 2.4.5参数配置变化
spark.sql.catalogImplementation
配置为hive
。spark.sql.sources.default
配置为hive
。spark.sql.odps.columnarReaderBatchSize
,向量化读每个batch包含的行数,默认值为4096。spark.sql.odps.enableVectorizedReader
,开启向量化读,默认值为True。spark.sql.odps.enableVectorizedWriter
,开启向量化写,默认值为True。spark.sql.odps.split.size
,该配置可以用来调节读MaxCompute表的并发度,默认每个分区为256 MB。
Spark 3.1.1使用注意事项
- 使用Spark 3.1.1提交作业
直接使用Yarn-cluster模式在本地提交任务。详情请参见Cluster模式。
- Spark 3.1.1使用变化
- 如果使用Yarn-cluster模式在本地提交任务,需要新增环境变量
HADOOP_CONF_DIR=$SPARK_HOME/conf
。 - 如果使用Yarn-cluster模式提交PySpark作业,需要在spark-defaults.conf配置文件添加以下参数使用Python3。
spark.hadoop.odps.cupid.resources = public.python-3.7.9-ucs4.tar.gz spark.pyspark.python = ./public.python-3.7.9-ucs4.tar.gz/python-3.7.9-ucs4/bin/python3
- 如果使用Local模式进行调试:
- 需要在
$SPARK_HOME/conf
目录下新建odps.conf文件,并添加如下配置。odps.project.name = odps.access.id = odps.access.key = odps.end.point =
- 需要添加
spark.hadoop.fs.defaultFS = file:///
,示例如下。val spark = SparkSession .builder() .config("spark.hadoop.fs.defaultFS", "file:///") .enableHiveSupport() .getOrCreate()
- 需要在
- 如果使用Yarn-cluster模式在本地提交任务,需要新增环境变量
- Spark 3.1.1参数配置变化
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.sql.odps.enableVectorizedReader
,开启向量化读,默认值为True。spark.sql.odps.enableVectorizedWriter
,开启向量化写,默认值为True。spark.sql.catalog.odps.splitSizeInMB
,该配置可以用来调节读MaxCompute表的并发度,默认每个分区为256 MB。