【Spark】使用Spark集群搭建-Standalone
以下是使用 Spark Standalone 模式搭建集群的详细步骤:
1. 环境准备
1.1 集群规划
假设有 3 台服务器:
- 主节点 (Master):spark-master (192.168.1.100)
- 工作节点 (Worker):spark-worker1 (192.168.1.101)、spark-worker2 (192.168.1.102)
1.2 系统要求
- 所有节点安装相同版本的 Java 8+(推荐 OpenJDK 11)
- 所有节点安装 Python 3.6+(可选,用于 PySpark)
- 关闭防火墙或开放以下端口:
- Master:7077(集群通信)、8080(Web UI)
- Worker:8081(Web UI)
2. 安装 Spark
2.1 下载 Spark
从 Apache Spark 官网 下载预编译版本(如 spark-3.3.2-bin-hadoop3
):
bash
wget https://downloads.apache.org/spark/spark-3.3.2/spark-3.3.2-bin-hadoop3.tgz
tar -zxvf spark-3.3.2-bin-hadoop3.tgz
mv spark-3.3.2-bin-hadoop3 /opt/spark
2.2 配置环境变量
在所有节点的 ~/.bashrc
中添加:
bash
export SPARK_HOME=/opt/spark
export PATH=$PATH:$SPARK_HOME/bin:$SPARK_HOME/sbin
使环境变量生效:
bash
source ~/.bashrc
3. 配置 Spark Standalone
3.1 主节点配置
在 Master 节点 (spark-master
) 上编辑以下文件:
3.1.1 spark-env.sh
复制模板并编辑:
bash
cd $SPARK_HOME/conf
cp spark-env.sh.template spark-env.sh
添加以下内容:
bash
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64 # 根据实际路径修改
export SPARK_MASTER_HOST=192.168.1.100
export SPARK_MASTER_PORT=7077
export SPARK_WORKER_MEMORY=2g # 每个 Worker 可用内存
export SPARK_WORKER_CORES=2 # 每个 Worker 可用 CPU 核心数
3.1.2 workers
复制模板并编辑:
bash
cp workers.template workers
添加所有 Worker 节点的主机名或 IP:
plaintext
spark-worker1
spark-worker2
3.2 分发配置到 Worker 节点
将配置好的 Spark 目录复制到所有 Worker 节点:
bash
# 在 Master 节点执行
scp -r /opt/spark spark-worker1:/opt/
scp -r /opt/spark spark-worker2:/opt/
4. 启动集群
4.1 启动 Master 节点
在 spark-master
上执行:
bash
start-master.sh
验证 Master 启动成功:访问 http://192.168.1.100:8080
,应看到 Spark Master 界面。
4.2 手动启动 Worker 节点(可选)
若自动启动失败,可在每个 Worker 节点手动启动:
bash
start-worker.sh spark://192.168.1.100:7077
4.3 验证集群状态
刷新 Master Web UI,应看到两个 Worker 节点已注册。
5. 提交 Spark 应用
使用 spark-submit
提交应用到集群:
bash
spark-submit \--master spark://192.168.1.100:7077 \--class org.apache.spark.examples.SparkPi \--executor-memory 1g \--total-executor-cores 2 \$SPARK_HOME/examples/jars/spark-examples_2.12-3.3.2.jar \100
6. 高级配置(可选)
6.1 动态分配资源
在 spark-defaults.conf
中启用:
bash
cp spark-defaults.conf.template spark-defaults.conf
添加:
properties
spark.dynamicAllocation.enabled true
spark.shuffle.service.enabled true
6.2 高可用性(HA)
配置 ZooKeeper 实现 Master 高可用:
bash
export SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER -Dspark.deploy.zookeeper.url=zk1:2181,zk2:2181,zk3:2181 -Dspark.deploy.zookeeper.dir=/spark"
7. 常用命令
bash
# 停止集群
stop-all.sh# 启动历史服务器
start-history-server.sh# 查看日志
cd $SPARK_HOME/logs
8. 故障排查
- Worker 无法连接 Master:检查防火墙、主机名解析和
spark-env.sh
配置。 - 内存不足:调整
SPARK_WORKER_MEMORY
和spark.executor.memory
参数。 - Web UI 无法访问:确保端口开放且 Master/Worker 服务正常运行。