学习笔记

  1. Spark运行模式(重点掌握)
    Local模式:本地单机运行,用于测试和开发

特点:所有组件都在单个JVM进程中运行

命令:./bin/spark-shell --master local[*]

Standalone模式:Spark自带的集群管理器

架构:Master + Worker节点

适用:中小规模集群

YARN模式:企业常用,Hadoop资源管理器

优点:与Hadoop生态集成好

角色:ResourceManager + NodeManager

关键角色理解:

Driver Program:运行main()函数,创建SparkContext

Cluster Manager:分配资源的外部服务

Executor:在工作节点上执行任务的进程

  1. 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(",")))

posted @ 2026-01-20 19:18  Lomook  阅读(0)  评论(0)    收藏  举报