Spark环境搭建流程(初学者版)
一、先搞清楚:初学者应该怎么学
对于初学者,建议按下面顺序来:
第一步:先搭本地环境(Local模式)
先在一台 Linux 机器上把 Spark 跑起来,学会 pyspark 和 spark-submit。
第二步:再学集群模式(Standalone)
理解 Spark 的 Master、Worker 是怎么工作的。
第三步:最后了解 Spark on YARN
这是更接近企业环境的模式,但不适合一上来就学。
二、搭建前准备
课件里给出的基础环境是:
- Linux:Ubuntu 16.04
- Hadoop:3.3.5
- JDK:1.8
- Spark:3.4.0
并且建议在 Linux 上安装和使用 Spark,不建议初学者优先在 Windows 上折腾。
三、第一阶段:搭建本地版 Spark(最适合初学者)
1. 准备基础软件
在安装 Spark 之前,先确保下面这些已经准备好:
必备
- JDK 1.8
- Hadoop(至少配置好相关环境变量)
- Python 环境
- 最好准备一个
pyspark的 Python 环境
课件中强调,Spark 常和 Hadoop 一起使用,Hadoop 负责存储,Spark 负责计算。
2. 下载 Spark 安装包
下载 Spark 3.4.0,对应安装包为:
spark-3.4.0-bin-without-hadoop.tgz
解压并放到 /usr/local/ 目录下,再改名为 spark。课件示例命令如下:
bash
sudo tar -zxf ~/Downloads/spark-3.4.0-bin-without-hadoop.tgz -C /usr/local/
cd /usr/local
sudo mv ./spark-3.4.0-bin-without-hadoop ./spark
sudo chown -R hadoop:hadoop ./spark
3. 配置 Spark 的核心文件
(1)配置 spark-env.sh
先复制模板文件:
bash
cd /usr/local/spark
cp ./conf/spark-env.sh.template ./conf/spark-env.sh
然后在 spark-env.sh 第一行加入:
bash
export SPARK_DIST_CLASSPATH=$(/usr/local/hadoop/bin/hadoop classpath)
这一步的作用可以简单理解为:
告诉 Spark 去哪里找到 Hadoop 相关依赖。
(2)配置 .bashrc
这是初学者最容易漏掉的一步。课件要求至少配置这几个环境变量:
JAVA_HOMEHADOOP_HOMESPARK_HOMEHADOOP_CONF_DIRPYSPARK_PYTHON
示例:
bash
export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_371
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export HADOOP_HOME=/usr/local/hadoop
export SPARK_HOME=/usr/local/spark
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export PYSPARK_PYTHON=/home/hadoop/anaconda3/envs/pyspark/bin/python3.8
export PATH=$PATH:${JAVA_HOME}/bin:$HADOOP_HOME/bin:$SPARK_HOME/bin
配置完后执行:
bash
source ~/.bashrc
(3)可选:调整日志级别
为了避免屏幕输出太多无关信息,可以把 Spark 日志改成只显示错误级别。课件给出的做法是:
bash
cd /usr/local/spark/conf
sudo mv log4j2.properties.template log4j.properties
vim log4j.properties
把其中的:
bash
rootLogger.level = error
这样后续运行程序时更清爽。
4. 验证 Spark 是否安装成功
安装好以后,不需要像 Hadoop 那样先启动服务。可以直接运行 Spark 自带示例 SparkPi 验证。
bash
cd /usr/local/spark
./bin/run-example SparkPi
为了只看结果,可以这样过滤:
bash
./bin/run-example SparkPi 2>&1 | grep "Pi is roughly"
如果看到类似输出:
bash
Pi is roughly 3.14159
说明 Spark 本地环境安装成功。
四、第二阶段:学会最基本的使用方法
1. 启动 pyspark
如果前面环境变量配好了,直接执行:
bash
cd /usr/local/spark
./bin/pyspark
默认就是 local[*] 模式,也就是本机多线程模式。
也可以显式指定:
bash
./bin/pyspark --master local[4]
表示使用 4 个 CPU 核心模拟运行。
2. 在 pyspark 里试运行
进入后先测试最简单表达式:
python
8*2+5
如果能正常返回结果,说明交互环境没问题。退出命令:
python
exit()
3. 用 spark-submit 提交程序
这是以后正式跑 Spark 程序最常用的方式。课件示例:
bash
cd /usr/local/spark
bin/spark-submit \
--master local[*] \
/usr/local/spark/examples/src/main/python/pi.py 10 2>&1 | grep "Pi is roughly"
这一步说明:
pyspark适合交互调试spark-submit适合正式运行程序
五、第三阶段:安装 PySpark 类库
这一点初学者很容易混淆:
- Spark:是计算框架
- PySpark:是 Python 类库
- bin/pyspark:是交互式客户端命令,不等于类库
课件建议在 pyspark 虚拟环境中安装 PySpark:
bash
conda activate pyspark
pip install pyspark==3.4.0 -i https://pypi.tuna.tsinghua.edu.cn/simple
然后进入 Python 测试:
python
import pyspark
不报错就说明安装成功。
六、第四阶段:写一个最简单的 Spark 程序
课件给了一个 WordCount.py 示例,核心流程非常适合入门理解:
python
from pyspark import SparkConf, SparkContext
conf = SparkConf().setMaster("local[*]").setAppName("My App")
sc = SparkContext(conf = conf)
logFile = "file:///usr/local/spark/README.md"
logData = sc.textFile(logFile, 2).cache()
numAs = logData.filter(lambda line: 'a' in line).count()
numBs = logData.filter(lambda line: 'b' in line).count()
print('Lines with a: %s, Lines with b: %s' % (numAs, numBs))
sc.stop()
你只需要理解这几步:
- 创建 Spark 配置
- 创建 Spark 上下文
- 读取文件
- 做转换和统计
- 输出结果
- 关闭 Spark
运行方式有两种:
方式1:直接用 Python 跑
bash
python WordCount.py
方式2:用 Spark 提交
bash
/usr/local/spark/bin/spark-submit --master local[*] WordCount.py
七、第五阶段:再学集群模式(Standalone)
当本地模式已经熟悉以后,再进入集群模式。
课件中使用 3 台机器做演示:
hadoop01:Master + Workerhadoop02:Workerhadoop03:Worker
这一步的核心目标是理解:
- Master:负责调度
- Worker:负责执行任务
集群搭建核心流程
对于初学者,不必一开始记所有细节,只抓住这 6 步:
1. 先搭好 Hadoop 集群
因为 Spark 常要读取 HDFS 数据。
2. 所有节点准备 Python 环境
建议所有节点都装好 Anaconda3,并激活 pyspark 环境。
3. 所有节点配置环境变量
保证每个节点都知道:
- Java 在哪
- Hadoop 在哪
- Spark 在哪
- Python 在哪
4. 配置 workers
在 Master 节点的 conf/workers 里写入所有 Worker 主机名:
bash
hadoop01
hadoop02
hadoop03
5. 配置 spark-env.sh
设置:
- Master 主机名
- 端口
- Worker 资源
- Hadoop 配置位置
- 历史日志配置
6. 启动集群
先启动 Hadoop,再启动 Spark:
bash
cd /usr/local/hadoop
sbin/start-all.sh
cd /usr/local/spark
./sbin/start-history-server.sh
sbin/start-master.sh
sbin/start-workers.sh
启动后可以在浏览器查看集群页面。课件中 Master 管理页面示例地址为:
bash
http://hadoop01:8081
八、第六阶段:了解 Spark on YARN
这个模式更接近企业环境。课件里强调:
- 企业往往已经有 Hadoop/YARN 集群
- 所以 Spark 很多时候直接跑在 YARN 上
- 不一定单独搭 Standalone 集群
Spark on YARN 的入门理解
你只要先记住:
它的前提
- 已经有 Hadoop/YARN 集群
- 有 Spark 客户端工具
- 有待提交程序
它的好处
- 资源统一管理
- 更适合企业生产环境
它的两种模式
client:适合学习和测试cluster:适合生产环境
最简单测试命令
启动 pyspark
bash
cd /usr/local/spark
./bin/pyspark --master yarn
提交程序
bash
cd /usr/local/spark
bin/spark-submit \
--master yarn \
/usr/local/spark/examples/src/main/python/pi.py 10 2>&1 | grep "Pi is roughly"
九、给初学者的推荐学习路线
第1周
先完成本地环境安装:
- JDK
- Hadoop 环境变量
- Spark 安装
pyspark启动SparkPi验证
第2周
练会两个命令:
pysparkspark-submit
并写一个最简单的 WordCount.py
第3周
学习读取:
- 本地文件
- HDFS 文件
第4周
再去理解:
- Standalone 集群
- Spark on YARN
- client / cluster 区别
十、初学者最容易踩的坑
1. 环境变量没配全
尤其是:
JAVA_HOMESPARK_HOMEHADOOP_HOMEHADOOP_CONF_DIRPYSPARK_PYTHON
2. 把 PySpark 类库和 pyspark 命令混为一谈
它们不是一回事。
3. 一上来就搭集群
初学者最好的策略是:
先本地跑通,再学分布式
4. 日志太多,看不到结果
可以用 grep 过滤,比如:
bash
2>&1 | grep "Pi is roughly"
十一、最简版流程图
可以把 Spark 环境搭建记成这条线:
准备 JDK/Hadoop/Python → 下载并解压 Spark → 配置 spark-env.sh 和 .bashrc → source 生效 → 跑 SparkPi 验证 → 用 pyspark 交互测试 → 用 spark-submit 提交程序 → 再学习集群模式和 YARN 模式