Spark Core学习总结

一、Spark运行架构
1. 核心组件
Driver(驱动器):
执行main方法,负责将用户程序转换为作业(Job)。
调度任务(Task)到Executor,并监控任务执行状态。
通过UI展示作业运行情况。
类比:类似于项目经理,统筹全局并分配任务。

2.核心概念

Executor: 集群中应用在工作节点上的虚拟机进程,用于计算。

并行度: 分布式计算框架中多个任务同时运行的数量,可以动态修改。


3.Executor(执行器):
工作节点(Worker)中的JVM进程,负责运行具体的Task。
提供缓存机制(存储RDD),加速计算。
核心功能:执行任务、返回结果、缓存数据。

4.Master & Worker:
Master负责资源调度与集群监控(类似YARN的ResourceManager)。
Worker负责处理数据(类似YARN的NodeManager)。

5.提交流程(以YARN为例)
Client模式:
Driver运行在本地机器,适合调试。
流程:Driver申请资源 → 启动ApplicationMaster → 分配Executor → 任务执行。

6.Cluster模式:
Driver运行在YARN集群,适合生产环境。
流程:ApplicationMaster直接作为Driver,管理任务执行。

7.算子

转换算子: 对数据格式和内容进行转换,如映射和筛选。

行动算子: 触发实际计算,读取到行动算子时才会真正运行。



二、RDD(弹性分布式数据集)
1. 核心特性
弹性:支持自动容错、数据分片调整、存储介质切换(内存/磁盘)。
不可变:RDD只读,转换操作生成新RDD。
分布式:数据分片存储在集群节点,并行计算。

2. 核心属性
分区列表:决定并行度。
依赖关系:窄依赖(1父分区→1子分区)与宽依赖(Shuffle依赖)。
分区器:Hash分区(默认)和Range分区,仅适用于Key-Value类型RDD。

3. 持久化机制
Cache/Persist:
将数据缓存至内存或磁盘,避免重复计算。
注意:缓存可能丢失,需依赖血缘关系(Lineage)恢复。

4. Checkpoint:
将数据持久化到HDFS,切断血缘依赖,提高容错效率。
最佳实践:Checkpoint前先Cache,避免重复计算。

5.任务划分
层级关系:Application → Job → Stage → Task。
每个Action算子生成一个Job。
Stage数量 = 宽依赖数 + 1。
Task数 = 最后一个RDD的分区数。



三、Spark Core编程基础
1. 环境配置
依赖:JDK 1.8、Scala 2.12、Spark 3.0.0。
IDEA插件:需安装Scala插件,配置Maven依赖(spark-core_2.12)。

2. WordCount示例

 

scala
object WordCount {
def main(args: Array[String]): Unit = {
val sparkConf = new SparkConf().setMaster("local[*]").setAppName("WordCount")
val sc = new SparkContext(sparkConf)
val fileRDD = sc.textFile("input/word.txt")
val result = fileRDD.flatMap(_.split(" ")).map((_, 1)).reduceByKey(_ + _)
result.collect().foreach(println)
sc.stop()
}
}

关键步骤:
读取文件 → 分词 → 转换结构 → 聚合 → 输出结果。

3. RDD创建方式
内存集合:parallelize或makeRDD(底层相同)。
外部存储:textFile读取HDFS或本地文件。
其他RDD转换:通过算子生成新RDD。

RDD依赖关系

血缘关系: 记录RDD的转换行为,以便恢复丢失的分区。

依赖关系: 相邻RDD之间的关系。

窄依赖: 每个上游RDD的分区最多被子RDD的一个分区使用。

宽依赖: 形象比喻成独生子女,涉及多个分区依赖。

RDD 的文件读取与保存

文件格式:主要包括 text 文件、CSV 文件、object 文件等。

文件系统:包括本地文件系统、HDFS、HBase 和数据库等。

读取与保存方法:使用 SC.textFile() 和 saveAs() 方法进行文件读取和保存。

RDD 创建案例

环境配置:JDK、Scala 和 Maven 插件的安装与配置。

创建 RDD:介绍了三种创建 RDD 的方式:

  根据集合内存创建

  根据外部文件创建

  从其他 RDD 创建


3. 应用场景:
批处理(如日志分析)、迭代计算(机器学习)、实时流处理(结合Structured Streaming)。



总结:Spark Core通过RDD实现了高效的分布式计算,其弹性、容错和并行化特性使其成为大数据处理的核心工具。掌握运行架构、RDD操作及编程实践是深入应用Spark的基础。

你可能感兴趣的:(spark,学习,大数据)