一. MaxCompute Spark 介绍
MaxCompute Spark是MaxCompute提供的兼容开源的Spark计算服务。它在统一的计算资源和数据集权限体系之上,提供Spark计算框架,支持用户以熟悉的开发使用方式提交运行Spark作业,以满足更丰富的数据处理分析场景。
1.1 关键特性
- 支持原生多版本Spark作业
- 社区原生Spark运行在MaxCompute里,完全兼容Spark的API,支持多个Spark版本同时运行
- 统一的计算资源
- 像MaxCompute SQL/MR等任务类型一样,运行在MaxCompute项目开通的统一计算资源中
- 统一的数据和权限管理
- 遵循MaxCompute项目的权限体系,在访问用户权限范围内安全地查询数据
- 与开源系统相同的使用体验
- 提供原生的开源实时Spark UI和查询历史日志的功能
1.2 系统结构
- 原生Spark通过MaxCompute Cupid平台能够在MaxCompute中运行
1.3 约束与限制
- 目前MaxCompute Spark支持以下适用场景:
- 离线计算场景:GraphX、Mllib、RDD、Spark-SQL、PySpark等
- Streaming场景
- 读写MaxCompute Table
- 引用MaxCompute中的文件资源
- 读写VPC环境下的服务,如RDS、Redis、HBase、ECS上部署的服务等
- 读写OSS非结构化存储
- 使用限制
- 不支持交互式类需求Spark-Shell、Spark-SQL-Shell、PySpark-Shell等
- 不支持访问MaxCompute外部表,函数和UDF
- 只支持Local模式和Yarn-cluster模式运行
二. 开发环境搭建
2.1 运行模式
- 通过Spark客户端提交
- Yarn-Cluster模式,提交任务到MaxCompute集群中
- Local模式
- 通过Dataworks提交
- 本质上也是Yarn-Cluster模式,提交任务到MaxCompute集群中
2.2 通过客户端提交
2.2.1 Yarn-Cluster模式
- 下载MC Spark客户端
- Spark 1.6.3
- Spark 2.3.0
- 环境变量配置
- 参数配置
- 将$SPARK_HOME/conf/spark-defaults.conf.template 重命名为 spark-defaults.conf
- 参数配置参考下文
- 准备项目工程
git clone https://github.com/aliyun/MaxCompute-Spark.git
cd spark-2.x
mvn clean package
- 任务提交
// bash环境
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
// 在windows环境提交的命令
cd $SPARK_HOME/bin
spark-submit.cmd --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
2.2.2 Local模式
- 与Yarn Cluster模式类似,用户首先需要做以上准备工作
- 任务提交
## 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
- IDEA调试注意
- IDEA运行Local模式是不能直接引用spark-defaults.conf里的配置,需要手动在代码里指定相关配置
- 一定要注意需要在IDEA里手动添加MaxCompute Spark客户端的相关依赖(jars目录),否则会出现以下报错:the value of spark.sql.catalogimplementation should be one of hive in-memory but was odps
2.3 通过DataWorks提交
2.3.1 资源上传
- 本质上MC Spark节点的配置对应于spark-submit命令的参数和选项
- 上传资源:
- 0~50MB:可以直接在DataWorks界面创建资源并上传
- 50MB~500MB:可以先利用MaxCompute客户端(CMD)上传,然后在DataWorks界面添加到数据开发
- 资源引用:
- 资源提交后,可以在DataWorks Spark节点界面选择需要的资源(jar/python/file/archive)
- 任务运行时:资源文件默认会上传到Driver和Executor的当前工作目录
2.3.2 参数和配置
- Spark 配置项:对应于spark-submit命令的--conf选项
- accessid,accesskey,projectname,endpoint,runtime.e