BWH Compass

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

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

BWH Compass 编辑整理更新于 约 4 分钟阅读

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 隧道访问,不直接对公网开放。任务结束后确认不再需要的进程退出。

正式集群还需要认证、网络隔离、资源调度、持久存储、日志与恢复设计,不能把单机演示直接当成生产方案。先用进程监控观察资源,再根据真实任务评估扩容。

完成后检查

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

官方资料与相关入口