本方案适用于需要多节点并行计算的大数据处理、机器学习模型训练、ETL 批处理等场景。
方案概述
本方案使用阿里云资源编排服务(ROS)的公共模板,在已有 VPC 网络基础上一键创建多台 ECS 实例,自动安装 JDK、Hadoop、Scala 和 Apache Spark,快速搭建 Spark 分布式集群环境。适用于需要多节点并行计算的大数据处理、机器学习模型训练、ETL 批处理等场景。
什么是 Apache Spark 集群
Apache Spark 是专为大规模数据处理设计的通用计算引擎。Spark 集群由一个 Master 节点和多个 Worker 节点组成:
节点角色 | 职责 |
Master | 集群管理节点,负责资源调度、任务分发和集群监控。提供 Web UI(8080 端口)供用户查看集群状态 |
Worker | 计算节点,接收 Master 分配的任务并执行实际的数据处理。Worker 数量可通过弹性伸缩组动态调整 |
本模板安装的软件版本如下:
组件 | 说明 | 版本 |
JDK | Java Development Kit,Java 运行环境 | 1.8.0 |
Hadoop | 分布式系统基础架构,提供 HDFS 分布式存储 | 2.7.7 |
Scala | 编程语言,Spark 核心框架基于 Scala 开发 | 2.12.1 |
Spark | 通用大数据计算引擎,支持 SQL 查询、流处理、机器学习 | 2.1.0 |
集群版与单机版的区别
对比维度 | 单机版 | 集群版(本方案) |
节点数量 | 1 台 ECS | 1 台 Master + N 台 Worker(3~10 台) |
计算能力 | 受限于单机资源 | 多节点并行,可水平扩展 |
弹性能力 | 无 | Worker 节点由弹性伸缩组管理,可自动扩缩容 |
适用场景 | 开发测试、学习验证 | 生产级批处理、大规模数据分析 |
本方案的特点:基于已有 VPC 部署
与其他 ROS 部署方案不同,本模板要求使用已有的 VPC、交换机和安全组,不会新建网络资源。这种设计适用于:
已有标准化网络环境,需要在现有 VPC 中添加 Spark 集群
多个项目共享一个 VPC,避免重复创建网络资源
创建的资源清单
序号 | 资源名称 | ROS 资源类型 | 数量 | 用途说明 |
1 | ECS 云服务器实例 |
| 1 | Spark Master 节点,绑定 EIP,运行集群管理服务 |
2 | 弹性伸缩组 |
| 1 | 管理 Spark Worker 节点,根据需求自动增减实例 |
3 | RAM 角色 |
| 1 | 颁发短时有效的 STS 访问令牌,安全授权弹性伸缩操作 |
4 | 系统运维管理 OOS(CloudOps Orchestration Service)模板 |
| 2 | 创建生命周期挂钩,在 Worker 节点创建/释放时自动执行初始化/清理脚本 |
部署完成后获得的结果
模板成功执行后,将获得以下资源:
一台 Spark Master ECS 实例(已绑定弹性公网 IP,提供集群管理 Web UI)
多台 Spark Worker ECS 实例(由弹性伸缩组管理,默认 2 台)
所有节点已安装 JDK 1.8.0、Hadoop 2.7.7、Scala 2.12.1、Spark 2.1.0
Master 与 Worker 节点已自动完成集群组网配置
资源栈输出中提供
SparkWebSiteURL,可登录 Spark 管理控制台
如需通过外网访问 SparkWebSiteURL,请在安全组添加入方向 8080 端口的访问规则。具体操作,请参见使用安全组。
架构图
用户访问
↓
EIP → Master ECS(8080端口)
↙ ↓ ↘
Worker-1 Worker-2 Worker-N
↑ ↑ ↑
弹性伸缩组自动管理(ESS ScalingGroup)
↑
OOS生命周期挂钩
(创建时自动安装Spark并加入集群)前提条件
在使用本模板前,请确认以下条件:
账号权限:阿里云账号需要具有 ECS、VPC、EIP、ESS(弹性伸缩)、RAM、OOS 产品的创建权限。
已有网络资源:需提前创建好 VPC、交换机和安全组。如何创建,请参见专有网络与交换机。
部署环节
部署参数
本模板要求使用已有 VPC 网络资源,以下参数均需在部署时填写。
参数名 | 类型 | 说明 | 示例值 |
现有 VPC 的实例 ID | String | VPC 实例 ID。如何查询,请参见专有网络与交换机。 |
|
交换机可用区 | String | 专有网络下的交换机可用区 ID | 华东 1 可用区 K |
网络交换机 ID | String | 专有网络下的交换机 ID。如何查询,请参见专有网络与交换机。 |
|
业务安全组 ID | String | ECS 安全组 ID。如何查询,请参见使用安全组。 |
|
实例规格 | String | ECS 实例规格(Master 和 Worker 共用),建议 4 核 8 GB 以上 |
|
实例镜像 ID | String | ECS 实例镜像 | centos_7 |
实例密码 | String | ECS 登录密码,长度 8~30,含大小写字母、数字和特殊字符 | - |
磁盘类型 | String | 系统盘类型:
更多信息,请参见云盘概述。 |
|
系统盘空间 | Number | 系统盘大小,取值范围 20~500,单位 GB |
|
实例数量 | Number | Spark 集群节点总数量(含 Master),取值范围 3~10 |
|
部署方式
方式一:通过 ROS 公共模板部署(推荐)
-
登录资源编排控制台。
在左侧导航栏,选择模板 > 公共模板 > 解决方案模板。
在搜索框中输入 Spark 进行搜索,找到模板:Spark 集群版(已有 VPC)。单击模板卡片中的创建资源栈。
在配置参数页面,输入资源栈名称,并按上表填写部署参数。
单击下一步:检查并确认,然后单击创建。
在左侧导航栏,选择,在资源栈列表页面单击目标资源栈ID,在资源栈信息页签查看资源栈状态,等待状态变为
CREATE_COMPLETE。单击输出页签,获取
SparkWebSiteURL。在浏览器中访问该 URL,登录 Spark 管理控制台即部署成功。
方式二:通过 ROS IaC Code 部署
IaC Code 是面向云基础设施的 AI 基础设施即代码助手,可根据自然语言描述生成 ROS 模板并部署,使用方式参见IaC Code快速入门。
# Prompt
帮我在已有VPC中部署Spark分布式集群环境。
要求:
1. 使用已有的VPC、VSwitch和安全组(不新建网络资源)。
2. 创建1台Master ECS节点,绑定弹性公网IP。
3. 创建弹性伸缩组管理Worker节点,初始2台Worker。
4. 所有节点使用CentOS 7镜像。
5. 通过UserData脚本自动安装JDK 1.8、Hadoop 2.7.7、Scala 2.12.1、Spark 2.1.0。
6. Master和Worker节点自动完成集群组网配置。
7. 使用OOS模板创建生命周期挂钩,Worker扩容时自动安装Spark并加入集群。
8. 安全组开放入方向8080端口。
9. 资源栈输出SparkWebSiteURL。部署后操作
验证 Spark 集群
在资源栈输出页签获取
SparkWebSiteURL。在浏览器中访问该 URL,看到 Spark 管理控制台页面即部署成功。
在 Spark Web UI 中确认 Worker 节点数量是否与设置的“实例数量 - 1”一致。
登录Master 节点后验证:
java -version # 查看JDK版本 hadoop version # 查看Hadoop版本 spark-shell --version # 查看Spark版本 # 查看集群Worker状态 cat $SPARK_HOME/conf/slaves # 查看已注册的Worker节点列表
常见问题
Q1:部署失败,报错“The specified InstanceType is not available”
原因:所选ECS实例规格在指定可用区中没有库存。
解决方案:
更换交换机所在的可用区后重新部署。
在云服务器ECS定价确认目标可用区的可用规格。
Spark 集群对内存需求较高,建议 Master 选择 4 核 8 GB 以上,Worker 选择 2 核 4 GB 以上。
Q2:部署成功但无法访问 SparkWebSiteURL
排查步骤:
Q3:Worker 节点未注册到 Master
排查步骤:
在 Spark Web UI(8080 端口)查看已注册的 Worker 列表。
登录 Worker 节点检查 Spark 进程是否运行。
检查 Worker 节点是否与 Master 节点在同一 VPC/VSwitch 内。
查看 Worker 日志:
cat $SPARK_HOME/logs/spark-*-worker-*.out