Spark系列文章:
大数据 - Spark系列《一》- 从Hadoop到Spark:大数据计算引擎的演进-CSDN博客
大数据 - Spark系列《二》- 关于Spark在Idea中的一些常用配置-CSDN博客
大数据 - Spark系列《三》- 加载各种数据源创建RDD-CSDN博客
目录
[1)🧀编程抽象类 RDD](#1)🧀编程抽象类 RDD)
[4) 🧀统一的结果类型](#4) 🧀统一的结果类型)
🍠延申:关于Spark默认并行度spark.default.parallelism的理解
[1. 🧀设置方式: 可以通过Spark配置项进行设置](#1. 🧀设置方式: 可以通过Spark配置项进行设置)
[2. 🧀影响因素](#2. 🧀影响因素)
[1. Spark是什么,用于什么场景?](#1. Spark是什么,用于什么场景?)
[2. Spark的优点](#2. Spark的优点)
[3. Spark为什么比MR效率高?](#3. Spark为什么比MR效率高?)
[4. Spark编程核心步骤](#4. Spark编程核心步骤)
[5. Spark运行模式有哪些?(.setMaster方法)](#5. Spark运行模式有哪些?(.setMaster方法))
[6. RDD是什么?](#6. RDD是什么?)
[7. 创建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
- 读数据库