一、先搞懂一句话:RDD是什么?
👉 RDD = 分布式数据集合(可以理解成"分布在多台机器上的数据列表") DD是什么?
👉 RDD = 分布式数据集合(可以理解成"分布在多台机器上的数据列表")
你可以把它理解成:
Python里的 list,只不过是"分布式版本"
二、RDD入门三步(最重要)
✅ 第一步:创建RDD
有两种最常见方式:
① 从文件读取(最常用)
python
lines = sc.textFile("file:///xxx/word.txt")
👉 说明:
- 可以读本地文件
- 也可以读 H### ② 从列表创建
python
rdd = sc.parallelize([1,2,3,4,5])
👉 说明:
- 适合测试、学习用
三、RDD操作核心(一定要记住)
👉 Spark操作分两类:
1️⃣ 转换操作(Transformation)
👉 不会立即执行!
比如:
python
rdd.map()
rdd.filter()
rdd.flatMap()
特点:
- 只是在"记录操作步骤"
- 不会真的计算 fileciteturn3file0
2️⃣ 行动操作(Action)
👉 才会真正执行计算!
比如:
python
rdd.collect()
rdd.count()
rdd.foreach()
👉 一旦调用:
python
rdd.map()
rdd.filter()
rdd.flatMap()
特点:
- 只是在"记录操作步骤"
- 不会真的计算 fileciteturn3file0
2️⃣ 行动操作(Action)
👉 才会真正执行计算!
比如:
python
rdd.collect()
rdd.count()
rdd.foreach()
👉 一旦调用:
👉 Spark才开始真正计算
🎯 一句话总结(非常重要)
没有Action,就不会执行计算! fileciteturn3file0
四、最常用的RDD操作(必须会)
1️⃣ map(最基础)
👉 对每个元素做处理
python
rdd.ma:contentReference[oaicite:9]{index=9}:contentReference[oaicite:10]{index=10}:contentReference[oaicite:3]{index=3}## 🎯 一句话总结(非常重要)
> **没有Action,就不会执行计算!** fileciteturn3file0
---
# 四、最常用的RDD操作(必须会)
## 1️⃣ map(最基础)
👉 对每个元素做处理
```python
rdd.map(lambda x: x+1)
2️⃣ filter(筛选)
python
rdd.filter(lambda x: x > 3)
3️⃣ flatMap(拆分)
👉 一行变多行(非常重要)
python
lines.flatMap(lambda line: line.split(" "))
4️⃣ reduceByKey(最重要)
👉 做统计、聚合
python
rdd.reduceByKey(lambda a,b: a+b)
五、经典入门案例(必须掌握)
🎯 词频统计(WordCount)
python
lines = sc.textFile("file:///xxx/word.txt")
result = lines \
.flatMap(lambda line: line.split(" ")) \
.map(lambda word: (word,1)) \
.reduceByKey(lambda a,b:a+b)
print(result.collect())
👉 这段代码是 Spark 入门"必考题" fileciteturn3file0
六、RDD运行流程(初学者必须理解)
👉 实际执行过程:
读取数据 → 转换 → 转换 → 转换 → 行动操作 → 输出结果
👉 注意:
- 前面都是"准备"
- 最后一步才
2️⃣ filter(筛选)
python
rdd.filter(lambda x: x > 3)
3️⃣ flatMap(拆分)
👉 一行变多行(非常重要)
python
lines.flatMap(lambda line: line.split(" "))
4️⃣ reduceByKey(最重要)
👉 做统计、聚合
python
rdd.reduceByKey(lambda a,b: a+b)
五、经典入门案例(必须掌握)
🎯 词频统计(WordCount)
python
lines = sc.textFile("file:///xxx/word.txt")
result = lines \
.flatMap(lambda line: line.split(" ")) \
.map(lambda word: (word,1)) \
.reduceByKey(lambda a,b:a+b)
print(result.collect())
👉 这段代码是 Spark 入门"必考题" fileciteturn3file0
六、RDD运行流程(初学者必须理解)
👉 实际执行过程:
读取数据 → 转换 → 转换 → 转换 → 行动操作 → 输出结果
👉 注意:
- 前面都是"准备"
- 最后一步才"执行"
七、RDD两个重要机制(理解即可)
1️⃣ 惰性机制(Lazy)
👉 不到最后不计算
2️⃣ 持久化(缓存)
👉 避免重复计算
python
rdd.cache()
👉 适合:
- 多次使用同一个RDD
八、分区(简单理解)
👉 RDD会被分成多个"块"并行计算
作用:
- 提高速度
- 提高并发
简单理解:
分区越多 → 并行越强(但也不能无限大) fileciteturn3file0
九、数据读写(实用)
1️⃣ 读文件
python
sc.textFile("file:///xxx/word.txt")
2️⃣ 写文件
python
rdd.saveAsTextFile("file:///xxx/output")
👉 注意:
- 不是一个文件
- 是一个目录(多个 part 文件) 是 Spark 入门"必考题" fileciteturn3file0
六、RDD运行流程(初学者必须理解)
👉 实际执行过程:
读取数据 → 转换 → 转换 → 转换 → 行动操作 → 输出结果
👉 注意:
- 前面都是"准备"
- 最后一步才"执行"
七、RDD两个重要机制(理解即可)
1️⃣ 惰性机制(Lazy)
👉 不到最后不计算
2️⃣ 持久化(缓存)
👉 避免重复计算
python
rdd.cache()
👉 适合:
- 多次使用同一个RDD
八、分区(简单理解)
👉 RDD会被分成多个"块"并行计算
作用:
- 提高速度
- 提高并发
简单理解:
分区越多 → 并行越强(但也不能无限大) fileciteturn3file0
九、数据读写(实用)
1️⃣ 读文件
python
sc.textFile("file:///xxx/word.txt")
2️⃣ 写文件
python
rdd.saveAsTextFile("file:///xxx/output")
👉 注意:
- 不是一个文件
- 是一个目录(多个 part 文件) fileciteturn3file0
十、初学者最小必会清单(重点)
如果你只记10件事,就记这个👇
-
什么是RDD(分布式数据)
-
如何创建RDD(t"Pi is roughly"
这一步说明:
pyspark适合交互调试spark-submit适合正式运行程序
五、第三阶段:安装 PySpark 类库
这一点初学者很容易混淆:
- Spark:是计算框架
- PySpark:是 Python 类库
- bin/pyspark:是交互式客户端命令,不等于类库
课件建议在
pyspark虚拟环境中安装 PySpark:fileciteturn2file0bashconda activate pyspark pip install pyspark==3.4.0 -i https://pypi.tuna.tsinghua.edu.cn/simple
然后进入 Python 测试:
python
import pyspark
不报错就说明安装成功。fileciteturn2file0
六、第四阶段:写一个最简单的 Spark 程序
课件给件给了一个 WordCount.py 示例,核心流程非常适合入门理解:fileciteturn2file0
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' n 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/sprk/bin/spark-submit --master local[*] WordCount.py
七、第五阶段:再学集群模式(Standalone)
当本地模式已经熟悉以后,再进入集群模式。
课件中使用 3 台机器做演示:
hadoop01:Master + Workerhadoop02:Workerhadoop03:Worker
这一步的核心目标是理解:
- Master:负责调度
- Worker:负责执行任务fileciteturn2file0
集群搭建核心流程
对于学者,不必一开始记所有细节,只抓住这 6 步6 步:
1. 先搭好 Hadoop 集群
因为 Spark 常要读取 HDFS 数据。fileciteturn2file0
2. 所有节点准备 Python 环境
建议所有节点都装好 Anaconda3,并激活 pyspark 环境。fileciteturn2file0
3. 所有节点配置环境变量
保证每个节点都知道:
- Java 在哪
- Hadoop 在哪
- Spark 在哪
- Python 在哪fileciteturn2file0
4. 配置 workers
在 Master 节点的 conf/workers 里写入所有 Worker 主机名:fileciteturn2file0
bash
hadoop01
hadoop02
hadoop03
5. 配置 spark-env.sh
设置:
- Master 主机名
- 端口
- Worker 资源
- Hadoop 配置位置
- 历史日志配置fileciteturn2file0
6. 启动集群
先启动 Hadoop,再启动 Spark:fileciteturn2file0
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 集alone 集群fileciteturn2file0
Spark on YARN 的入门理解
你只要先记住:
它的前提
- 已经有 Hadoop/YARN 集群
- 有 Spark 客户端工具
- 有待提交程序fileciteturn2file0
它的好处
- 资源统一管理
- 更适合企业生产环境
它的两种模式
client:适合学习和测试cluster:适合生产环境fileciteturn2file0
最简单测试命令
启动 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 命令混为一谈
它们不是一回事。fileciteturn2file0
3. 一上来就搭集群
初学者最好的策略是:
先本地跑通,再学分布式
4. 日志太多,看不到结果
可以用 grep 过滤,比如:
bash
2>&1 | grep "Pi is roughly"
十一、最简版流程图
准备 JDK/Hadoop/Python → 下载并解压 Spark → 配置 spark-env.sh 和 .bashrc → source 生效 → 跑 SparkPi 验证 → 用 pyspark 交互测试 → 用 spark-submit 提交程序 → 再学习集群模式和 YARN 模式