学习笔记
- Spark运行模式(重点掌握)
Local模式:本地单机运行,用于测试和开发
特点:所有组件都在单个JVM进程中运行
命令:./bin/spark-shell --master local[*]
Standalone模式:Spark自带的集群管理器
架构:Master + Worker节点
适用:中小规模集群
YARN模式:企业常用,Hadoop资源管理器
优点:与Hadoop生态集成好
角色:ResourceManager + NodeManager
关键角色理解:
Driver Program:运行main()函数,创建SparkContext
Cluster Manager:分配资源的外部服务
Executor:在工作节点上执行任务的进程
- RDD核心概念(重要突破点)
RDD的五大特性(深入理解):
分区列表:数据被切分成多个partition
计算函数:每个分区都有相同的计算函数
依赖关系:RDD之间的血缘关系(lineage)
分区器:决定数据如何分区(仅Key-Value RDD)
首选位置:数据本地性优化
RDD操作分类:
Transformation(转换操作) - 惰性执行
scala
// 常用转换操作实践
val rdd1 = sc.parallelize(1 to 10)
val rdd2 = rdd1.map(x => x * 2) // 映射
val rdd3 = rdd2.filter(x => x > 10) // 过滤
val rdd4 = rdd3.flatMap(x => x to x+2) // 扁平映射
Action(行动操作) - 触发计算
scala
println(rdd4.count()) // 计数
rdd4.collect().foreach(println) // 收集并打印
rdd4.saveAsTextFile("output") // 保存到文件
3. 关键机制理解
惰性求值(Lazy Evaluation):
转换操作只记录计算逻辑,不立即执行
优点:优化执行计划,减少不必要的中间结果
血缘关系(Lineage):
RDD通过转换操作形成依赖链
容错基础:丢失数据时可通过血缘重新计算
DAG调度:
text
代码 → RDD对象 → DAG → Stage划分 → Task调度 → 执行
💻 实践操作记录
实验1:环境验证
bash
启动Spark-shell成功
$ ./bin/spark-shell
Spark context Web UI available at http://192.168.1.100:4040
Spark context available as 'sc' (master = local[*], app id = local-xxx)
实验2:RDD基础操作
scala
// 创建RDD的两种方式
val rddFromCollection = sc.parallelize(List(1,2,3,4,5))
val rddFromFile = sc.textFile("data/sample.txt")
// 完整单词计数示例(WordCount)
val textRDD = sc.textFile("data/wordcount.txt")
val words = textRDD.flatMap(line => line.split(" "))
val wordPairs = words.map(word => (word, 1))
val wordCounts = wordPairs.reduceByKey(_ + _)
// 执行并查看结果
wordCounts.collect().foreach(println)
实验3:理解分区
scala
// 查看RDD分区数
val rdd = sc.parallelize(1 to 100, 4) // 指定4个分区
println("分区数量: " + rdd.partitions.length)
println("分区数据: " + rdd.glom().collect().map(_.mkString(",")))

浙公网安备 33010602011771号