当前位置:网站首页>5. Spark核心编程(1)
5. Spark核心编程(1)
2022-07-17 05:09:00 【Mmj666】
5. Spark核心编程(1)
Spark 计算框架为了能够进行高并发和高吞吐的数据处理,封装了三大数据结构,用于 处理不同的应用场景。三大数据结构分别是:
- RDD:弹性分布式数据集
- 累加器:分布式共享只写变量
- 广播变量:分布式共享只读变量
5.1 RDD
5.1.1 什么是RDD
RDD(Resilient Distributed Dataset)叫做弹性分布式数据集,是 Spark 中最基本的数据 处理模型。代码中是一个抽象类,它代表一个弹性的、不可变、可分区、里面的元素可并行 计算的集合。
- 弹性:
- 存储的弹性:内存与磁盘的自动切换;
- 容错的弹性:数据丢失可以自动恢复;
- 计算的弹性:计算出错重试机制;
- 分片的弹性:可根据需要重新分片。
2.分布式:数据存储在大数据集群不同节点上
3.数据集:RDD 封装了计算逻辑,并不保存数据
4.数据抽象:RDD 是一个抽象类,需要子类具体实现
5.不可变:RDD 封装了计算逻辑,是不可以改变的,想要改变,只能产生新的 RDD,在 新的 RDD 里面封装计算逻辑
6.可分区、并行计算
5.1.2 核心属性
RDD的核心属性共有5个:分区列表、分区计算函数、RDD之间的依赖关系、分区器(可选)、首选位置(可选)。
/* * - A list of partitions * - A function for computing each split * - A list of dependencies on other RDDs * - Optionally, a Partitioner for key-value RDDs (e.g. to say that the RDD is hash-partitioned) * - Optionally, a list of preferred locations to compute each split on (e.g. block locations for * an HDFS file) */
- 分区列表:RDD 数据结构中存在分区列表,用于执行任务时并行计算,是实现分布式计算的重要属性。
/** * Implemented by subclasses to return the set of partitions in this RDD. This method will only * be called once, so it is safe to implement a time-consuming computation in it. * * The partitions in this array must satisfy the following property: * `rdd.partitions.zipWithIndex.forall { case (partition, index) => partition.index == index }` */
protected def getPartitions: Array[Partition]
- 分区计算函数:Spark 在计算时,是使用分区函数对每一个分区进行计算
/** * :: DeveloperApi :: * Implemented by subclasses to compute a given partition. */
@DeveloperApi
def compute(split: Partition, context: TaskContext): Iterator[T]
- RDD 之间的依赖关系:RDD 是计算模型的封装,当需求中需要将多个计算模型进行组合时,就需要将多个 RDD 建 立依赖关系
/** * Implemented by subclasses to return how this RDD depends on parent RDDs. This method will only * be called once, so it is safe to implement a time-consuming computation in it. */
protected def getDependencies: Seq[Dependency[_]] = deps
- 分区器(可选):当数据为 KV 类型数据时,可以通过设定分区器自定义数据的分区
/** Optionally overridden by subclasses to specify how they are partitioned. */
@transient val partitioner: Option[Partitioner] = None
- 首选位置(可选):计算数据时,可以根据计算节点的状态选择不同的节点位置进行计算
/** * Optionally overridden by subclasses to specify placement preferences. */
protected def getPreferredLocations(split: Partition): Seq[String] = Nil
5.1.3 执行原理
从计算的角度来讲,数据处理过程中需要计算资源(内存 & CPU)和计算模型(逻辑)。 执行时,需要将计算资源和计算模型进行协调和整合。
Spark 框架在执行时,先申请资源,然后将应用程序的数据处理逻辑分解成一个一个的计算任务。然后将任务发到已经分配资源的计算节点上, 按照指定的计算模型进行数据计算。最后得到计算结果。
RDD 是 Spark 框架中用于数据处理的核心模型。在 Yarn 环境中,RDD 的工作原理:
1)启动Yarn集群环境

2) Spark 通过申请资源创建调度节点和计算节点

3) Spark 框架根据需求将计算逻辑根据分区划分成不同的任务

4) 调度节点将任务根据计算节点状态发送到对应的计算节点进行计算

RDD 在整个流程中主要用于将逻辑进行封装,并生成 Task 发送给 Executor 节点执行计算。
资料来源(尚硅谷Spark 仅供学习,非商用
边栏推荐
- Macro definition of C language
- ArcMap creates a constant grid and tessellates it into a new grid
- Shell script configures root to login to other hosts without secret
- User mode protocol stack - UDP implementation based on netmap
- 递归的应用
- 【函数的效率】
- mysql 缓存策略和解决方案
- redis 源码分析 跳表实现
- gradle
- Web3js development technology
猜你喜欢
随机推荐
Cityengine 3D pipe modeling tutorial
What are the B domain, m domain and O domain
Excel calculates the remaining days of the month
性能瓶颈查找-火焰图分析
User mode protocol stack - UDP implementation based on netmap
Character processing function
Is the software testing training of lemon class reliable? This successful case of counter attack from the training class tells you
redis 源码分析 动态字符串实现(sds)
一次全面的性能优化,从5秒优化到1秒
mysql的锁
Common (Consortium)
2022年春招最新消息:IT互联网行业平均薪资18500元
指针数组&数组指针
ETL tool -- kettle realizes simple data migration
Mapbox loads local offline terrain
redis源码分析 2 迭代器
11.数据仓库搭建之DWS层搭建
操作系统常见面试题
UML (use case diagram, class diagram, object diagram, package diagram)
使用Flink SQL传输市场数据1:传输VWAP









