以下是 Spark Standalone 集群搭建 的详细步骤(基于 Linux 系统,以伪分布式为例):
一、环境准备
1. 硬件要求
- 至少 2 台节点(1 台 Master,1 台 Worker,可扩展)。
- 每节点配置:CPU ≥ 2 核,内存 ≥ 4GB,磁盘 ≥ 50GB。
2. 软件要求
- JDK 1.8+(需配置 JAVA_HOME 环境变量)。
- Spark 安装包(下载地址:Spark 官网,选择 "Standalone" 版本)。
- SSH 无密码登录(Master 需免密登录 Worker 节点)。
二、配置 Master 节点
1. 解压 Spark
bash
tar -zxvf spark-3.5.0-bin-hadoop3.tgz -C /usr/local/
cd /usr/local/spark
2. 配置环境变量
bash
vi /etc/profile
# 添加以下内容
export SPARK_HOME=/usr/local/spark
export PATH=$PATH:$SPARK_HOME/bin:$SPARK_HOME/sbin
# 生效配置
source /etc/profile
3. 修改配置文件
bash
# 复制模板文件
cp conf/spark-env.sh.template conf/spark-env.sh
vi conf/spark-env.sh
# 添加内容(示例,根据节点配置调整)
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk
export SPARK_MASTER_MEMORY=4g # Master 内存
export SPARK_WORKER_MEMORY=3g # Worker 内存(单节点总内存)
export SPARK_WORKER_CORES=2 # Worker CPU 核心数
export SPARK_WORKER_INSTANCES=1 # 每个 Worker 节点启动的实例数(默认 1)
4. 配置集群节点列表
bash
cp conf/slaves.template conf/slaves
vi conf/slaves
# 添加 Worker 节点主机名或 IP(每行一个,伪分布式可写 `localhost`)
worker1
worker2
三、配置 Worker 节点
1. 同步 Spark 安装包
在 Master 节点执行(假设 Worker 节点为 worker1 和 worker2 ):
bash
scp -r /usr/local/spark worker1:/usr/local/
scp -r /usr/local/spark worker2:/usr/local/
2. 配置环境变量
在每个 Worker 节点执行:
bash
vi /etc/profile
# 添加与 Master 相同的 SPARK_HOME 和 PATH 配置
source /etc/profile
3. 验证 SSH 无密码登录
在 Master 节点生成 SSH 密钥并分发至 Worker 节点:
bash
ssh-keygen -t rsa -P "" -f ~/.ssh/id_rsa
ssh-copy-id worker1
ssh-copy-id worker2
# 测试连接:ssh worker1 应无需密码直接登录
四、启动集群
1. 启动 Master
bash
cd /usr/local/spark/sbin
./start-master.sh
# 查看 Master 状态:浏览器访问 http://MasterIP:8080
2. 启动 Worker
在每个 Worker 节点执行(或在 Master 节点批量启动):
bash
./start-slave.sh spark://MasterIP:7077
# 批量启动(Master 节点执行):
./start-slaves.sh
3. 验证集群状态
- Web 界面:访问 http://MasterIP:8080 ,查看 Worker 节点是否在线。
- 命令行:执行 ./spark-shell --master spark://MasterIP:7077 验证连接。
五、提交作业测试
1. 提交示例作业(WordCount)
bash
./bin/spark-submit \
--master spark://MasterIP:7077 \
--class org.apache.spark.examples.JavaWordCount \
--executor-memory 1g \
--total-executor-cores 2 \
$SPARK_HOME/examples/jars/spark-examples_*.jar \
hdfs://path/to/input.txt hdfs://path/to/output
2. 本地文件测试(伪分布式)
bash
./bin/spark-submit \
--master spark://localhost:7077 \
--class org.apache.spark.examples.JavaWordCount \
--executor-memory 1g \
--total-executor-cores 2 \
$SPARK_HOME/examples/jars/spark-examples_*.jar \
file:///usr/local/spark/README.md /tmp/output
六、停止集群
bash
cd /usr/local/spark/sbin
./stop-slaves.sh # 停止所有 Worker
./stop-master.sh # 停止 Master
七、常见问题与优化
1. 防火墙问题
- 开放端口:
- Master:7077(通信端口)、8080(Web 界面)
- Worker:随机端口(需允许 Master 与 Worker 间的所有 TCP 通信)
- 临时关闭防火墙(测试用):
bash
systemctl stop firewalld
systemctl disable firewalld
2. 配置参数调整
- Worker 内存不足:减小 SPARK_WORKER_MEMORY (如设为 2g )。
- 多 Worker 实例:在 conf/spark-env.sh 中增加 SPARK_WORKER_INSTANCES=2 (需确保内存足够)。
- 动态资源分配:在 spark-submit 中添加 --deploy-mode cluster (适用于生产环境)。
3. 日志配置
修改 conf/log4j.properties 调整日志级别(如将 INFO 改为 WARN 减少输出)。
八、集群扩展
- 新增 Worker 节点:
1. 在 Master 节点的 conf/slaves 中添加新节点信息。
2. 同步 Spark 安装包至新节点。
3. 在新节点配置环境变量和 SSH 免密登录。
4. 重启集群或执行 ./start-slaves.sh 启动新 Worker。
通过以上步骤,可搭建一个基础的 Spark Standalone 集群。生产环境中建议结合 ZooKeeper 实现高可用(HA),或使用 Kubernetes/YARN 作为资源管理器。