2018-08-15
Apache Spark 是大数据领域里最常见的分布式计算框架之一。 很多人第一次接触 Spark,最先卡住的不是算子,也不是作业提交,而是安装过程:
spark-shell 能跑起来,算不算安装成功?这篇文章不讲复杂原理,重点围绕 Spark 的几种常见安装方式来写,目标只有一个:
让你知道在不同场景下,应该怎么把 Spark 正确装起来。
实际工作和学习里,常见安装方式主要有这几种:
本地单机安装
适合个人学习、开发调试、写 Demo。
Standalone 集群安装
适合在几台机器上快速搭建 Spark 集群,结构相对简单。
基于 Hadoop YARN 的安装
适合企业里比较常见的大数据平台环境,通常会和 HDFS、YARN 一起使用。
Docker 安装
适合快速体验、做实验、做环境隔离,也适合本地统一开发环境。
云平台或托管环境
例如某些云厂商的大数据平台、Databricks、EMR 一类服务,这种严格来说不是“手工安装”,但也是非常常见的使用方式。
如果你只是想先学会 Spark,我建议优先走这条路径:
不管你选哪种方式,Spark 安装前最好先确认下面几个前提。
Spark 运行依赖 JVM,所以必须先安装 JDK。
通常需要确认:
java -version 能正常输出版本JAVA_HOMEPATH 中能找到 java示例:
java -version
echo $JAVA_HOME
如果这两步都不通,后面大概率会报:
JAVA_HOME is not setjava: command not found如果你准备使用 PySpark,还需要有 Python 环境。
建议确认:
python3 --version
which python3
很多人装好了 Spark,却发现 pyspark 起不来,本质上不是 Spark 没装好,而是 Python 没配好。
这点很容易误解。
结论是:
也就是说,Spark 并不是“必须依赖完整 Hadoop 才能启动”,但在企业环境里,二者经常一起出现。
这是最常见、也最推荐的入门方式。
本地单机安装的核心步骤很简单:
spark-shell 或 pyspark 验证假设你已经下载好了 Spark 压缩包并解压到:
/opt/spark
可以在 shell 配置中加入:
export SPARK_HOME=/opt/spark
export PATH=$SPARK_HOME/bin:$PATH
export JAVA_HOME=/path/to/jdk
然后执行:
spark-shell
或者:
pyspark
如果能正常进入交互环境,说明基础安装已经成功。
可以直接执行一段简单代码:
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 基本可用。
优点:
缺点:
Spark 自带 Standalone 集群管理模式。
它不像 YARN 那么重,但足够搭一个标准的 Spark 集群。
Standalone 模式下,通常包括:
Master 负责资源管理和任务调度,Worker 负责执行任务。
一般流程如下:
比较常接触的是:
conf/spark-env.shconf/workers例如:
SPARK_MASTER_HOST=192.168.1.10
JAVA_HOME=/path/to/jdk
workers 文件中填写 Worker 节点列表:
worker1
worker2
worker3
在 Master 节点上通常会用到:
sbin/start-master.sh
sbin/start-workers.sh spark://master-host:7077
启动后,通常可以通过 Spark Web UI 查看集群状态。
优点:
缺点:
这是企业环境里非常常见的一种方式。
很多人容易把这个过程理解错。
基于 YARN 运行 Spark,通常不是说“先装一个全新的 Spark 操作系统级服务”,而是:
从这个角度看,它更像是“把 Spark 接入 Hadoop 平台”。
通常需要已有:
很多环境里还会有:
这类安装最容易卡在配置兼容上,通常需要关注:
HADOOP_CONF_DIRYARN_CONF_DIRJAVA_HOME示例:
export HADOOP_CONF_DIR=/etc/hadoop/conf
export YARN_CONF_DIR=/etc/hadoop/conf
export JAVA_HOME=/path/to/jdk
一个典型验证方式是提交本地示例任务到 YARN:
spark-submit \
--master yarn \
--deploy-mode client \
--class org.apache.spark.examples.SparkPi \
examples/jars/spark-examples*.jar \
10
如果任务能在 YARN 上成功运行,基本说明环境打通了。
优点:
缺点:
Docker 是近几年非常常见的 Spark 安装方式,尤其适合快速实验和环境隔离。
Docker 安装 Spark,本质上是:
docker run 或 docker compose 编排常见有两种:
单容器体验版
适合快速测试命令是否可运行。
多容器集群版
一般包括一个 Master 和多个 Worker,常配合 docker compose 使用。
例如,你可能会用:
docker pull
docker run -it --rm /bin/bash
或者用 docker compose 起一个包含:
的环境。
Spark 本身是跨平台的,但不同系统下的安装体验差异很大。
Linux 是最常见、也最稳定的 Spark 运行环境。
原因很简单:
如果你是认真做大数据开发,Linux 环境基本绕不过去。
macOS 很适合本地开发和学习。
优点:
注意点:
Windows 也能装 Spark,但通常不是首选。
原因主要是:
如果你是 Windows 用户,更推荐这几种方式:
如果按实际使用场景来选,可以直接参考下面这张思路表。
| 场景 | 推荐方式 |
|---|---|
| 个人学习 Spark 基础 | 本地单机安装 |
| 想快速做实验,不想污染本机 | Docker 安装 |
| 想理解 Spark 集群结构 | Standalone 安装 |
| 企业已有 Hadoop 平台 | 基于 YARN 的安装 |
| 想快速用起来,少碰底层环境 | 云平台 / 托管环境 |
如果你现在还拿不准,记住这个最稳妥的建议:
JAVA_HOME is not set这是最经典的问题。
本质上就是 Spark 找不到 Java。
检查:
echo $JAVA_HOME
which java
java -version
pyspark 能启动,但导包报错通常需要检查:
PYSPARK_PYTHON 是否配置正确这种问题通常和“安装本身”已经没太大关系,更多是环境接入问题,比如:
优先检查:
不要只看到 spark-shell 启动成功就觉得万事大吉。
更稳妥的做法是至少验证下面几项:
交互命令能启动
例如 spark-shell、pyspark
能执行一个简单作业
例如做一个 count()
能访问 Web UI
确认 Master、Application、Executor 信息是否正常
能读写一份测试数据
比如读本地文件、写一份输出目录
如果是集群环境,确认作业确实跑在目标资源管理器上
例如 YARN 页面是否能看到任务
如果你是第一次装 Spark,我建议按下面的顺序来,不容易乱:
先在本地单机模式装通
目标是能用 spark-shell 或 pyspark
学会 spark-submit
再试 Docker 版
理解 Master / Worker / 容器网络
最后再接触 YARN 或 Kubernetes
这一步才是真正进入生产环境思路
很多人一上来就装集群,最后花大量时间在环境问题上,反而没有学到 Spark 本身。
Spark 的安装并不只有一种标准答案,而是取决于你的目标:
所以真正重要的问题不是“哪种安装方式最正确”,而是:
你当前是为了学习、实验,还是为了接入生产环境?
把这个问题想清楚,安装路线自然就清楚了。
如果你只想尽快把 Spark 在本地跑起来,可以按这份最小清单执行:
JAVA_HOMESPARK_HOME$SPARK_HOME/bin 加入 PATHspark-shell 或 pysparkcount() 验证只要这 7 步通了,你就已经具备继续学 Spark 的环境基础。