# Spark 入门：先在本地模式验证任务

单台小型 VPS 更适合学习 Spark 的任务与数据处理流程，不能因为启动了 Spark 就获得分布式集群能力。

更新日期：2026-09-16

规范地址：https://stock.iftalking.com/guides/spark/

## 1. 先用本地模式理解 Spark

Spark 适合数据处理任务，小型 VPS 可以学习 API 和运行小样本，但单台机器不是高可用分布式集群。内存、磁盘和 CPU 都有限，先限制数据量和并行度，不直接运行生产级全量任务。

从当前 Spark 官方文档核对 Java、Scala、Python 与发行包要求。不同大版本的依赖会变化，旧教程中 Java 8、Python 旧版与新 Spark 可能不兼容。

```bash
java -version
python3 --version
free -h
df -h
```

## 2. 选择安装方式并记录版本

从 Apache 官方下载匹配的二进制发行包并验证校验值，或在独立 Python 虚拟环境安装项目明确要求的 PySpark。不要同时混用系统 Spark、pip PySpark 和不匹配的 Java 路径。

解压发行包后先运行其 `bin/spark-submit --version`，记录实际版本与 Java 路径。环境变量只给该任务或服务设置，避免覆盖其他 Java 应用所需的 JAVA_HOME。

## 3. 用一个很小的任务验证链路

保存以下内容为 `small_job.py`。任务只处理内存中四行数据，使用两个本地工作线程；资源更小的机器可改为 `local[1]`。

```python
from pyspark.sql import SparkSession

spark = (SparkSession.builder
         .master('local[2]')
         .appName('small-check')
         .getOrCreate())
try:
    rows = [('web', 3), ('db', 2), ('web', 5), ('cache', 1)]
    frame = spark.createDataFrame(rows, ['service', 'count'])
    frame.groupBy('service').sum('count').show()
finally:
    spark.stop()
```

```bash
/opt/spark/bin/spark-submit --master 'local[2]' small_job.py
```

路径换成实际安装位置。结果应能看到 web 汇总为 8、db 为 2、cache 为 1，顺序不保证一致。看到启动日志但没有结果时，继续检查错误与退出状态。

## 4. 理解 Driver、Executor 和临时文件

Driver 负责协调任务，Executor 执行计算；本地模式把这些职责放在同一台机器内。设置 executor 数量不会让一台 VPS 凭空多出物理内存或 CPU。

大排序、聚合和 shuffle 会产生临时磁盘文件。任务开始前估计输入、输出和中间数据空间，关注 OOM、磁盘满和长时间 GC。不要把所有数据 collect 到 Driver，尤其是在小内存实例上。

## 5. 管理界面只给自己访问

Spark Web UI、Master 和 History Server 等端口可能暴露任务、路径和配置。学习环境绑定本地或受控网络，通过 SSH 隧道访问，不直接对公网开放。任务结束后确认不再需要的进程退出。

正式集群还需要认证、网络隔离、资源调度、持久存储、日志与恢复设计，不能把单机演示直接当成生产方案。先用[进程监控](https://stock.iftalking.com/guides/process-monitoring/)观察资源，再根据真实任务评估扩容。


## 完成后检查

先证明代表性任务能稳定完成，再扩大数据量。不要将一次演示任务成功当作生产容量评估。

## 参考资料

- [spark.apache.org · 项目文档](https://spark.apache.org/docs/latest/)
