spark安装与部署




2018-08-15

blog_main_img

Apache Spark 是大数据领域里最常见的分布式计算框架之一。 很多人第一次接触 Spark,最先卡住的不是算子,也不是作业提交,而是安装过程:

  • 到底是装本地版,还是集群版?
  • 必须先装 Hadoop 吗?
  • Java 版本怎么选?
  • spark-shell 能跑起来,算不算安装成功?
  • Docker 安装和源码包安装,分别适合什么场景?

这篇文章不讲复杂原理,重点围绕 Spark 的几种常见安装方式来写,目标只有一个:
让你知道在不同场景下,应该怎么把 Spark 正确装起来。


1. 先说结论:Spark 常见安装方式有哪些

实际工作和学习里,常见安装方式主要有这几种:

  1. 本地单机安装
    适合个人学习、开发调试、写 Demo。

  2. Standalone 集群安装
    适合在几台机器上快速搭建 Spark 集群,结构相对简单。

  3. 基于 Hadoop YARN 的安装
    适合企业里比较常见的大数据平台环境,通常会和 HDFS、YARN 一起使用。

  4. Docker 安装
    适合快速体验、做实验、做环境隔离,也适合本地统一开发环境。

  5. 云平台或托管环境
    例如某些云厂商的大数据平台、Databricks、EMR 一类服务,这种严格来说不是“手工安装”,但也是非常常见的使用方式。

如果你只是想先学会 Spark,我建议优先走这条路径:

  • 第一步:本地单机安装
  • 第二步:Docker 安装体验集群化环境
  • 第三步:再接触 YARN 或 Standalone 集群

2. 安装前必须确认的前置条件

不管你选哪种方式,Spark 安装前最好先确认下面几个前提。

2.1 Java 环境

Spark 运行依赖 JVM,所以必须先安装 JDK。

通常需要确认:

  • java -version 能正常输出版本
  • 配置好 JAVA_HOME
  • PATH 中能找到 java

示例:

java -version
echo $JAVA_HOME

如果这两步都不通,后面大概率会报:

  • JAVA_HOME is not set
  • java: command not found

2.2 Python 环境

如果你准备使用 PySpark,还需要有 Python 环境。

建议确认:

python3 --version
which python3

很多人装好了 Spark,却发现 pyspark 起不来,本质上不是 Spark 没装好,而是 Python 没配好。

2.3 Hadoop 不是必须,但很多场景会用到

这点很容易误解。

结论是:

  • 学习 Spark,本地运行,不一定要先安装 Hadoop
  • 如果要跑在 YARN 上,通常需要和 Hadoop 环境配合
  • 如果只是本地读写本地文件,Spark 自己就能跑

也就是说,Spark 并不是“必须依赖完整 Hadoop 才能启动”,但在企业环境里,二者经常一起出现。


3. 方式一:本地单机安装

这是最常见、也最推荐的入门方式。

3.1 适用场景

  • 学习 Spark 基本概念
  • 调试 DataFrame / SQL / RDD 代码
  • 本地跑小规模测试任务
  • 搭建个人开发环境

3.2 安装思路

本地单机安装的核心步骤很简单:

  1. 安装 JDK
  2. 下载 Spark 二进制包
  3. 解压
  4. 配置环境变量
  5. 启动 spark-shellpyspark 验证

3.3 一个典型流程

假设你已经下载好了 Spark 压缩包并解压到:

/opt/spark

可以在 shell 配置中加入:

export SPARK_HOME=/opt/spark
export PATH=$SPARK_HOME/bin:$PATH
export JAVA_HOME=/path/to/jdk

然后执行:

spark-shell

或者:

pyspark

如果能正常进入交互环境,说明基础安装已经成功。

3.4 如何验证是否安装成功

可以直接执行一段简单代码:

Scala 方式:

val data = Seq(1, 2, 3, 4, 5)
val rdd = spark.sparkContext.parallelize(data)
rdd.count()

PySpark 方式:

data = [1, 2, 3, 4, 5]
rdd = spark.sparkContext.parallelize(data)
rdd.count()

如果返回 5,通常说明 Spark 基本可用。

3.5 优点和缺点

优点:

  • 安装最简单
  • 最适合学习
  • 不依赖多台机器
  • 出问题时好排查

缺点:

  • 不能真实模拟复杂集群环境
  • 对资源调度、分布式存储、集群提交的体验有限

4. 方式二:Standalone 集群安装

Spark 自带 Standalone 集群管理模式。
它不像 YARN 那么重,但足够搭一个标准的 Spark 集群。

4.1 适用场景

  • 几台机器快速搭 Spark 集群
  • 学习 Master / Worker 结构
  • 中小规模实验环境

4.2 基本架构

Standalone 模式下,通常包括:

  • 1 个 Master 节点
  • 1 到多个 Worker 节点

Master 负责资源管理和任务调度,Worker 负责执行任务。

4.3 安装步骤概览

一般流程如下:

  1. 每台机器安装 JDK
  2. 每台机器部署 Spark
  3. 保证机器间网络互通
  4. 配置主机名或 IP
  5. 在 Master 上启动主节点
  6. 在 Worker 上连接 Master

4.4 常见配置文件

比较常接触的是:

  • conf/spark-env.sh
  • conf/workers

例如:

SPARK_MASTER_HOST=192.168.1.10
JAVA_HOME=/path/to/jdk

workers 文件中填写 Worker 节点列表:

worker1
worker2
worker3

4.5 启动方式

在 Master 节点上通常会用到:

sbin/start-master.sh
sbin/start-workers.sh spark://master-host:7077

启动后,通常可以通过 Spark Web UI 查看集群状态。

4.6 优点和缺点

优点:

  • 比 YARN 更轻量
  • 安装和理解成本相对低
  • 适合教学、测试、实验

缺点:

  • 企业里使用率通常不如 YARN / Kubernetes 常见
  • 和现有 Hadoop 平台整合能力不如 YARN 自然

5. 方式三:基于 Hadoop YARN 的安装

这是企业环境里非常常见的一种方式。

5.1 适用场景

  • 公司已经有 Hadoop 集群
  • 希望 Spark 使用 YARN 做资源调度
  • 作业要和 HDFS、Hive、Kerberos 等环境整合

5.2 这种方式到底是在“安装”什么

很多人容易把这个过程理解错。

基于 YARN 运行 Spark,通常不是说“先装一个全新的 Spark 操作系统级服务”,而是:

  • 集群里已经有 Hadoop / YARN
  • 你再部署 Spark 客户端和相关依赖
  • 提交作业时让 Spark 跑到 YARN 上

从这个角度看,它更像是“把 Spark 接入 Hadoop 平台”。

5.3 基本前提

通常需要已有:

  • Hadoop 集群
  • YARN ResourceManager / NodeManager
  • HDFS
  • 可用的 JDK

很多环境里还会有:

  • Hive
  • Zookeeper
  • Kerberos

5.4 常见配置点

这类安装最容易卡在配置兼容上,通常需要关注:

  • HADOOP_CONF_DIR
  • YARN_CONF_DIR
  • JAVA_HOME
  • Spark 与 Hadoop 版本兼容性

示例:

export HADOOP_CONF_DIR=/etc/hadoop/conf
export YARN_CONF_DIR=/etc/hadoop/conf
export JAVA_HOME=/path/to/jdk

5.5 提交验证

一个典型验证方式是提交本地示例任务到 YARN:

spark-submit \
  --master yarn \
  --deploy-mode client \
  --class org.apache.spark.examples.SparkPi \
  examples/jars/spark-examples*.jar \
  10

如果任务能在 YARN 上成功运行,基本说明环境打通了。

5.6 优点和缺点

优点:

  • 能融入现有 Hadoop 生态
  • 适合企业生产环境
  • 资源调度统一

缺点:

  • 配置复杂度更高
  • 版本兼容问题更多
  • 排查问题成本明显高于本地单机

6. 方式四:Docker 安装

Docker 是近几年非常常见的 Spark 安装方式,尤其适合快速实验和环境隔离。

6.1 适用场景

  • 快速拉起可用环境
  • 团队统一本地开发环境
  • 做演示、实验、培训
  • 避免本机直接安装一堆依赖

6.2 核心思路

Docker 安装 Spark,本质上是:

  • 用镜像封装 JDK、Spark、Python 等依赖
  • 用容器来运行 Master、Worker 或 Client
  • 通过 docker rundocker compose 编排

6.3 常见形态

常见有两种:

  1. 单容器体验版
    适合快速测试命令是否可运行。

  2. 多容器集群版
    一般包括一个 Master 和多个 Worker,常配合 docker compose 使用。

6.4 一个简化的思路

例如,你可能会用:

docker pull 
docker run -it --rm  /bin/bash

或者用 docker compose 起一个包含:

  • spark-master
  • spark-worker-1
  • spark-worker-2

的环境。

6.5 Docker 安装的优势

  • 环境可复制
  • 迁移方便
  • 污染宿主机少
  • 新人上手快

6.6 Docker 安装的不足

  • 需要额外理解容器网络、端口、挂载
  • 本地调试文件路径时容易混淆宿主机和容器
  • 一些与 Hadoop 生态深度整合的场景,仍然比不上真实集群环境

7. 方式五:Windows、macOS、Linux 各自怎么考虑

Spark 本身是跨平台的,但不同系统下的安装体验差异很大。

7.1 Linux

Linux 是最常见、也最稳定的 Spark 运行环境。

原因很简单:

  • 大多数生产环境都在 Linux
  • 脚本和依赖兼容性最好
  • 集群部署经验最丰富

如果你是认真做大数据开发,Linux 环境基本绕不过去。

7.2 macOS

macOS 很适合本地开发和学习。

优点:

  • 安装 JDK、Python、Spark 相对方便
  • 适合做本地调试
  • 适合 PySpark 和 Notebook 场景

注意点:

  • Apple Silicon 和 x86 环境差异要留意
  • 某些依赖库在不同芯片架构下行为可能不同

7.3 Windows

Windows 也能装 Spark,但通常不是首选。

原因主要是:

  • 环境变量配置更容易出问题
  • Hadoop 相关依赖在 Windows 下折腾成本更高
  • 很多线上环境最终还是 Linux

如果你是 Windows 用户,更推荐这几种方式:

  • WSL 中安装
  • Docker 安装
  • 远程连 Linux 环境开发

8. 几种安装方式怎么选

如果按实际使用场景来选,可以直接参考下面这张思路表。

场景 推荐方式
个人学习 Spark 基础 本地单机安装
想快速做实验,不想污染本机 Docker 安装
想理解 Spark 集群结构 Standalone 安装
企业已有 Hadoop 平台 基于 YARN 的安装
想快速用起来,少碰底层环境 云平台 / 托管环境

如果你现在还拿不准,记住这个最稳妥的建议:

  • 学习阶段:本地单机 + Docker
  • 工作阶段:YARN / Kubernetes / 托管平台

9. 常见安装问题

9.1 JAVA_HOME is not set

这是最经典的问题。

本质上就是 Spark 找不到 Java。
检查:

echo $JAVA_HOME
which java
java -version

9.2 pyspark 能启动,但导包报错

通常需要检查:

  • 当前 Python 解释器是不是你以为的那个
  • 是否有多个 Python 版本冲突
  • PYSPARK_PYTHON 是否配置正确

9.3 本地能跑,提交到集群失败

这种问题通常和“安装本身”已经没太大关系,更多是环境接入问题,比如:

  • 集群地址不对
  • Hadoop 配置没带上
  • 权限问题
  • 网络问题
  • 依赖包没分发

9.4 Web UI 打不开

优先检查:

  • 端口是否被占用
  • 防火墙是否拦截
  • 宿主机和容器端口映射是否正确
  • 你访问的是不是正确节点

10. 安装完成后,建议你立刻验证这几件事

不要只看到 spark-shell 启动成功就觉得万事大吉。
更稳妥的做法是至少验证下面几项:

  1. 交互命令能启动
    例如 spark-shellpyspark

  2. 能执行一个简单作业
    例如做一个 count()

  3. 能访问 Web UI
    确认 Master、Application、Executor 信息是否正常

  4. 能读写一份测试数据
    比如读本地文件、写一份输出目录

  5. 如果是集群环境,确认作业确实跑在目标资源管理器上
    例如 YARN 页面是否能看到任务


11. 一个推荐的学习顺序

如果你是第一次装 Spark,我建议按下面的顺序来,不容易乱:

  1. 先在本地单机模式装通
    目标是能用 spark-shellpyspark

  2. 学会 spark-submit

  3. 再试 Docker 版
    理解 Master / Worker / 容器网络

  4. 最后再接触 YARN 或 Kubernetes
    这一步才是真正进入生产环境思路

很多人一上来就装集群,最后花大量时间在环境问题上,反而没有学到 Spark 本身。


12. 总结

Spark 的安装并不只有一种标准答案,而是取决于你的目标:

  • 如果是学习,用本地单机最省事
  • 如果想快速体验隔离环境,用 Docker 很合适
  • 如果要理解 Spark 自己的集群模式,可以装 Standalone
  • 如果在企业环境里,很多时候会跑在 YARN 上

所以真正重要的问题不是“哪种安装方式最正确”,而是:

你当前是为了学习、实验,还是为了接入生产环境?

把这个问题想清楚,安装路线自然就清楚了。


13. 附:一份最小化本地安装清单

如果你只想尽快把 Spark 在本地跑起来,可以按这份最小清单执行:

  1. 安装 JDK
  2. 配置 JAVA_HOME
  3. 下载并解压 Spark
  4. 配置 SPARK_HOME
  5. $SPARK_HOME/bin 加入 PATH
  6. 执行 spark-shellpyspark
  7. 跑一个 count() 验证

只要这 7 步通了,你就已经具备继续学 Spark 的环境基础。