Spark系列文章:
大数据 - Spark系列《一》- 从Hadoop到Spark:大数据计算引擎的演进-CSDN博客
大数据 - Spark系列《二》- 关于Spark在Idea中的一些常用配置-CSDN博客
大数据 - Spark系列《三》- 加载各种数据源创建RDD-CSDN博客
目录
🍠Spark分布式运行原理
1)🧀编程抽象类 RDD
2)🧀分区数据处理
3)🧀统一的数据处理逻辑
4) 🧀统一的结果类型
🍠延申:关于Spark默认并行度spark.default.parallelism的理解
1. 🧀设置方式: 可以通过Spark配置项进行设置
2. 🧀影响因素
🍠Spark面试题总结:
1. Spark是什么,用于什么场景?
2. Spark的优点
3. Spark为什么比MR效率高?
4. Spark编程核心步骤
5. Spark运行模式有哪些?(.setMaster方法)
6. RDD是什么?
7. 创建RDD的方式有哪些?
🍠Spark分布式运行原理
Spark作为一种分布式计算引擎,能够高效地处理大规模数据,其分布式运行的原理主要基于以下几个方面:
1)🧀编程抽象类 RDD
Spark中的核心概念之一是弹性分布式数据集(RDD),它是一种抽象的数据结构,代表分布在集群中的数据集。RDD具备分区的特性,每个分区可以看作是并行处理的单元,Spark会以分区为单位创建任务实例,从而实现分布式运行计算。目前可以理解RDD为带有分区信息和算子计算逻辑的迭代器
创建一个RDD 到底有几个分区(并行)?
1. 加载文件源头RDD
当通过加载文件等方式创建RDD时,RDD的初始分区数由Spark根据输入数据的大小和集群配置自动确定。通常情况下,如果没有特别指定,Spark会尽可能地将数据分成多个分区,以提高并行度和性能。对于文件加载的源头RDD,默认情况下至少会有2个分区。
2. 调用算子返回的RDD
当对一个RDD调用转换算子(transformation)时,返回的新RDD的分区数通常与父RDD的分区数保持一致。
2)🧀分区数据处理
在Spark分布式运行中,各个分区处理属于自己的数据任务。每个任务会被分配到不同的节点上执行,并且各个分区的计算逻辑是一致的,这样就可以保证在不同节点上的并行计算结果是一致的。
3)🧀统一的数据处理逻辑
在处理数据的过程中,Spark提供了丰富的方法和算子来对RDD进行各种操作,例如map、flatMap、reduce等。这些操作符能够灵活地应用于各个分区的数据上,并且具有统一的数据处理逻辑,从而保证了整个作业的一致性。
4) 🧀统一的结果类型
最终,在分布式运行完成后,各个分区处理的结果会被合并成一个统一的RDD。这样就保证了返回的结果类型是一致的,可以进一步进行后续的操作和分析。
🍠延申:关于Spark默认并行度spark.default.parallelism的理解
spark.default.parallelism
是指RDD任务的默认并行度,即RDD中的分区数。它对Spark作业的并行执行有着重要影响。
1. 🧀设置方式: 可以通过Spark配置项进行设置
val conf = new SparkConf()
.set("spark.default.parallelism", "500")
2. 🧀影响因素
-
父RDD分区数: 当初始RDD没有设置分区数(
numPartition
或numSlice
)时,默认并行度取决于spark.default.parallelism
的值。 -
分布式shuffle操作: 在使用
reduceByKey
、join
等分布式shuffle算子操作时,reduce端的stage默认取spark.default.parallelism
配置项的值作为分区数。 -
没有shuffle的算子: 对于没有shuffle的算子,在创建RDD又没有设置分区数时,默认并行度依赖Spark运行的模式:
-
本地模式: 默认并行度取决于本地机器的核数。
--local: 没有指定CPU核数,则所有计算都运行在一个线程当中,没有任何并行计算--local[K]:指定使用K个Core来运行计算,比如local[2]就是运行2个Core来执行
--local[*]: 自动帮你按照CPU的核数来设置线程数。比如CPU有32个逻辑处理器,Spark帮你自动设置32个线程计算。
-
集群模式: 默认并行度为8。
-
目前Spark系列文章已经更新到第四篇,Spark第一阶段学习也已经完成。对此,特对知识点做了一个汇总如下
🍠Spark面试题总结:
1. Spark是什么,用于什么场景?
Spark是一站式分布式计算引擎,主要用于离线处理
2. Spark的优点
1)比MR效率高
2)API丰富,可以实现复杂度处理逻辑
3)功能组件丰富,满足各种处理需求场景
4)支持多语言编程
3. Spark为什么比MR效率高?
1)减少了与HDFS的交互的次数
2)减少了作业初始化的流程
3)开发高效
4. Spark编程核心步骤
1)编程环境
2)加载各种数据源
3)使用算子处理数据
4)保存结果
5. Spark运行模式有哪些?(.setMaster方法)
1)本地测试
2)yarn集群
3)自带的集群模式
6. RDD是什么?
RDD是弹性分布式数据集,它是一种抽象的数据结构,可以理解为带有分区信息和算子计算逻辑的迭代器。
7. 创建RDD的方式有哪些?
1)读文件
2)本地集合用makerdd方法转换成rdd
3) 读数据库