一、PySpark Standalone 集群概述
PySpark Standalone 集群是 Apache Spark 的一种部署模式,它不依赖于其他资源管理系统(如 YARN 或 Mesos),而是使用 Spark 自身的集群管理器。这种模式适合快速部署和测试,尤其在开发和学习环境中较为常见。
二、集群组件
-
Master 节点:
- 负责资源调度和任务分配
- 管理 Worker 节点的注册和状态
- 协调应用程序的执行
-
Worker 节点:
- 负责执行具体的计算任务
- 管理本地资源(CPU、内存)
- 与 Master 节点通信,汇报状态
-
Driver 程序:
- 运行用户编写的 Spark 应用程序
- 负责将应用转换为任务(Task)
- 与 Master 和 Worker 节点协作完成计算
三、工作流程
-
启动集群:
- 首先启动 Master 节点
- 然后启动多个 Worker 节点,它们会自动连接到 Master
-
提交应用:
- 用户通过 spark-submit 命令提交 PySpark 应用
- Driver 程序在本地或集群中启动
-
资源分配:
- Master 为应用分配资源(Worker 上的 Executor)
- Executor 是运行在 Worker 节点上的进程,负责执行任务
-
任务执行:
- Driver 将任务分发给 Executor
- Executor 执行任务并返回结果
四、部署步骤
1. 环境准备
确保所有节点安装了 Java 和 Python,并配置好环境变量。
2. 下载并解压 Spark
从 Apache 官网下载 Spark,解压到所有节点的相同目录:
wget https://downloads.apache.org/spark/spark-3.4.1/spark-3.4.1-bin-hadoop3.tgz
tar -zxvf spark-3.4.1-bin-hadoop3.tgz
3. 配置环境变量
在所有节点的.bashrc 或.bash_profile 中添加:
export SPARK_HOME=/path/to/spark
export PATH=$PATH:$SPARK_HOME/bin:$SPARK_HOME/sbin
4. 配置 Spark
在 Spark 目录下创建并编辑配置文件:
cd $SPARK_HOME/conf
cp spark-env.sh.template spark-env.sh
cp slaves.template slaves
编辑 spark-env.sh:
export JAVA_HOME=/path/to/java
export SPARK_MASTER_HOST=master-node-ip
export SPARK_MASTER_PORT=7077
export SPARK_WORKER_MEMORY=2g
编辑 slaves:
worker1-ip
worker2-ip
worker3-ip
5. 启动集群
在 Master 节点上执行:
start-all.sh
这将启动 Master 和所有 Worker 节点。
6. 查看集群状态
访问 Master 的 Web UI:http://master-node-ip:8080
7. 提交 PySpark 应用
spark-submit --master spark://master-node-ip:7077 your_script.py
五、配置参数说明
-
资源相关:
SPARK_WORKER_MEMORY
:每个 Worker 可用的内存SPARK_WORKER_CORES
:每个 Worker 可用的 CPU 核心数spark.executor.memory
:每个 Executor 的内存大小spark.executor.cores
:每个 Executor 的 CPU 核心数
-
网络相关:
SPARK_MASTER_HOST
:Master 节点的 IP 或主机名SPARK_MASTER_PORT
:Master 监听的端口SPARK_WORKER_PORT
:Worker 监听的端口
-
日志相关:
SPARK_LOG_DIR
:日志存储目录SPARK_WORKER_DIR
:Worker 工作目录
六、常见问题及解决方法
-
Worker 无法连接到 Master:
- 检查网络连通性
- 确认 Master 的 IP 和端口配置正确
- 检查防火墙设置,确保端口开放
-
任务执行缓慢:
- 增加 Worker 节点或调整资源分配
- 优化 Spark 应用的并行度设置
- 检查数据倾斜问题
-
内存溢出错误:
- 增加
spark.executor.memory
参数 - 优化数据处理逻辑,减少内存占用
- 使用序列化方式存储数据
- 增加
七、监控与管理
-
Web UI:
- Master UI:http://master-node-ip:8080
- 应用 UI:http://driver-node-ip:4040
-
命令行工具:
spark-status.sh
:查看集群状态stop-all.sh
:停止集群
-
日志查看:
- Master 日志:$SPARK_HOME/logs/spark--org.apache.spark.deploy.master.Master-.out
- Worker 日志:$SPARK_HOME/logs/spark--org.apache.spark.deploy.worker.Worker-.out
通过以上步骤,你可以成功部署和使用 PySpark Standalone 集群。这种模式适合小规模数据处理和测试环境,对于大规模生产环境,建议考虑 YARN 或 Kubernetes 等更强大的资源管理系统。