spark的Standalone模式介绍
Apache Spark 的 Standalone 模式是其自带的集群管理模式,无需依赖外部资源管理器(如 YARN 或 Mesos),可快速部署和运行 Spark 集群。以下是对 Standalone 模式的详细介绍:
1. 核心组件
Master 节点
- 集群的主控制器,负责资源分配和任务调度。
- 管理 Worker 节点的注册和状态监控。
- 接收客户端提交的应用程序,并为其分配资源。
Worker 节点
- 工作节点,负责执行具体的计算任务。
- 向 Master 注册并汇报可用资源(内存、CPU)。
- 为应用程序启动 Executor 进程。
Executor
- 每个应用程序专属的进程,负责执行具体的任务(Task)。
- 持有应用程序的内存数据(如 RDD 缓存)。
Driver
- 运行用户编写的 Spark 应用程序的主程序。
- 负责将应用程序转换为 DAG(有向无环图),并提交给 Master 进行调度。
2. 工作流程
-
集群启动
启动 Master 节点和多个 Worker 节点,Worker 自动向 Master 注册。 -
应用提交
用户通过spark-submit
命令提交应用,Driver 程序在客户端或集群中启动。 -
资源分配
Driver 向 Master 请求资源(CPU 和内存),Master 通知 Worker 节点启动 Executor。 -
任务执行
Driver 将任务分发给 Executor 执行,Executor 将结果返回给 Driver。 -
资源释放
应用程序完成后,Executor 和资源被释放。
3. 部署模式
Client 模式
- Driver 在客户端运行:适用于交互式作业(如 Spark Shell)。
- 优点:便于调试,直接在本地看到输出。
- 缺点:客户端与集群需保持网络连接,否则作业会中断。
Cluster 模式
- Driver 在集群中的某个 Worker 节点运行:适用于生产环境。
- 优点:作业提交后可断开客户端连接,提高可靠性。
- 缺点:调试不便,日志需通过 Web UI 查看。
4. 快速部署
步骤 1:下载并解压 Spark
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
cd spark-3.3.2-bin-hadoop3
步骤 2:配置环境变量
编辑conf/spark-env.sh
(如果不存在,复制模板cp conf/spark-env.sh.template conf/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 # 每个Worker可用内存
export SPARK_WORKER_CORES=2 # 每个Worker可用CPU核心数
步骤 3:配置 Worker 节点
编辑conf/slaves
(如果不存在,复制模板cp conf/slaves.template conf/slaves
),添加 Worker 节点 IP:
worker1-ip
worker2-ip
...
步骤 4:启动集群
# 在Master节点上执行
sbin/start-all.sh# 等价于分别启动Master和Worker
sbin/start-master.sh
sbin/start-slaves.sh
步骤 5:查看 Web UI
访问http://master-node-ip:8080
查看集群状态。
5. 提交应用程序
Client 模式示例
./bin/spark-submit \--class org.apache.spark.examples.SparkPi \--master spark://master-node-ip:7077 \--executor-memory 1g \--total-executor-cores 2 \examples/jars/spark-examples_2.12-3.3.2.jar \100
7. 优缺点
优点
- 轻量级:无需额外依赖,部署简单。
- 快速启动:相比 YARN,资源分配更直接。
- 内置支持:Spark 原生支持,无需额外配置。
缺点
- 功能有限:相比 YARN,缺乏多租户支持和细粒度资源隔离。
- 调度简单:仅支持 FIFO 和公平调度,不支持更复杂的资源模型。
- 生产环境建议:大型集群建议使用 YARN 或 Kubernetes。
总结
Standalone 模式适合快速搭建测试环境或小规模生产集群,提供了 Spark 最基本的集群管理能力。核心是理解 Master、Worker、Executor 和 Driver 的角色分工,以及 Client/Cluster 两种部署模式的区别。对于大规模生产环境,建议考虑更成熟的资源管理器(如 YARN)。