大数据-83 Spark 集群 RDD编程简介 RDD特点 Spark编程模型介绍

本文涉及的产品
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
简介: 大数据-83 Spark 集群 RDD编程简介 RDD特点 Spark编程模型介绍

点一下关注吧!!!非常感谢!!持续更新!!!

目前已经更新到了:

Hadoop(已更完)

HDFS(已更完)

MapReduce(已更完)

Hive(已更完)

Flume(已更完)

Sqoop(已更完)

Zookeeper(已更完)

HBase(已更完)

Redis (已更完)

Kafka(已更完)

Spark(正在更新!)

章节内容

上节我们完成了如下的内容:


Hadoop 集群启动

Spark 集群启动

h121 h122 h123 节点启动

集群启动测试 SparkShell

什么是RDD

RDD是Spark的基石,是实现Spark数据处理的核心现象。

RDD是一个抽象类,它代表一个不可变、可分区、里面的元素可并行计算的集合。


RDD(Resilient Distributed Dataset)是Spark中的核心概念,它是一个容错、可以并行执行的分布式数据集。

它有如下的5个特征:


一个分区的列表

一个计算函数compute,对每个分区进行计算

对其他RDDs的依赖(宽依赖、窄依赖)列表

对Key-Value RDDs来说,存在一个分区器(Partitioner)【可选】

对每个分区由一个优先位置的列表【可选】

RDD 特点介绍

不可变性(Immutability)

RDD一旦创建,就不能被修改。每次对RDD进行操作(例如过滤、映射等)都会产生一个新的RDD。这种不可变性简化了并行处理,因为无需担心多个计算节点间的数据竞争。


分布式(Distributed)

RDD的数据分布在多个节点上,这使得Spark能够处理大规模的数据集。RDD的每个分区都可以在不同的节点上独立处理。


容错性(Fault Tolerance)

RDD通过“血统”(Lineage)记录其生成方式。如果RDD的某些分区在计算过程中丢失,可以根据这些血统信息重新计算丢失的数据。通过这种方式,RDD能够在节点故障时自动恢复。


惰性求值(Lazy Evaluation)

RDD的操作被分为两类:转换操作(Transformations) 和 行动操作(Actions)。转换操作是惰性求值的,即不会立即执行,而是等到遇到行动操作时才触发计算。这样做的好处是可以通过合并多个转换操作来优化计算过程,减少不必要的中间计算。


类型安全(Type Safety)

在Scala语言中,RDD是类型安全的,意味着你可以在编译时捕获类型错误,这对开发者来说非常有帮助。


并行操作(Parallel Operation)

RDD的每个分区可以独立进行处理,允许多线程或多节点并行执行,充分利用集群的计算资源。


缓存与持久化(Caching and Persistence)

可以将RDD缓存或持久化到内存或磁盘中,以便在多次使用时避免重复计算,从而提高性能。


丰富的API

RDD提供了丰富的API支持各种操作,包括map、filter、reduceByKey、groupBy、join等,能够满足大部分分布式数据处理的需求。


RDD的特点

分区

RDD逻辑上是分区的,每个分区的数据是抽象存在的,计算的时候通过一个compute函数得到每个分区的数据。如果RDD是通过己有的文件系统构建,则compute函数是读取指定文件系统中的数据,如果RDD是通过其他RDD转换而来,则compute函数是执行转换逻辑将其他RDD的数据进行转换。

只读

RDD是只读的,要想改变RDD中的数据,只能在现有的RDD基础上创建新的RDD。

一个RDD转换为另一个RDD,通过丰富的算子(map filter union join reduceByKey等等)实现,不再像MR那样写Map和Reduce了。

RDD的操作算子包括两类:


Transformation:用来对RDD进行转化,延迟执行(Lazy)

Action:用来出发RDD的计算,得到相关计算结果或者将RDD保存的文件系统中

依赖

RDDs通过操作算子进行转换,转换得到的新RDD包含了从其他RDDs衍生出所必须得信息,RDDs之间维护着这种学院关系(lineage),也称为依赖。


窄依赖:RDDs之间的分区是一一对应的(1对1 或者 n对1)

宽依赖:子RDD每个分区与父RDD的每个分区都有关,是多对多的关系

缓存

可以控制存储级别(内存、磁盘等)来进行缓存

如果在应用程序中多次使用同一个RDD,可以将RDD缓存起来,该RDD只有在第一次计算的时候会根据血缘关系得到分区的数据,在后续其他地方用到该RDD的时候,会直接从缓存取而不用再根据血缘计算,加速后期的重用。 CheckPoint

虽然RDD的血缘关系天然的可以实现容错,当RDD的某个分区失败或者丢失,可以通过血缘关系来进行重建。

但是对于长时间迭代型的应用来说,随着迭代的进行,RDDs之间的血缘关系会越来越长,一旦在后续迭代的过程中出错,则需要 通过非常长的血缘关系去重建,影响性能。

RDD支持CheckPoint将数据保存到持久化的存储中,这样就可以切断之前的血缘关系,因为CheckPoint后的RDD不需要知道它的父RDDs了,可以直接从CheckPoint拿到数据。


Spark编程模型

RDD表示数据对象

通过对象上的方法调用来对RDD进行转换

最终显示结果或者将结果输出到外部数据源

RDD转换算子称为Transformation是Lazy的(延迟执行)

只有遇到 Action算子,才会执行RDD的转换操作

如果要使用Spark,就需要编写Driver程序,它被提交到集群运行。


Driver中定义了一个或多个RDD,并调用RDD上的各种算子

Worker则执行RDD分区计算任务

相关实践学习
基于MaxCompute的热门话题分析
Apsara Clouder大数据专项技能认证配套课程:基于MaxCompute的热门话题分析
目录
相关文章
|
4月前
|
负载均衡 算法 关系型数据库
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
本文聚焦 MySQL 集群架构中的负载均衡算法,阐述其重要性。详细介绍轮询、加权轮询、最少连接、加权最少连接、随机、源地址哈希等常用算法,分析各自优缺点及适用场景。并提供 Java 语言代码实现示例,助力直观理解。文章结构清晰,语言通俗易懂,对理解和应用负载均衡算法具有实用价值和参考价值。
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
|
5月前
|
负载均衡 算法 关系型数据库
大数据新视界--大数据大厂之MySQL数据库课程设计:MySQL集群架构负载均衡故障排除与解决方案
本文深入探讨 MySQL 集群架构负载均衡的常见故障及排除方法。涵盖请求分配不均、节点无法响应、负载均衡器故障等现象,介绍多种负载均衡算法及故障排除步骤,包括检查负载均衡器状态、调整算法、诊断修复节点故障等。还阐述了预防措施与确保系统稳定性的方法,如定期监控维护、备份恢复策略、团队协作与知识管理等。为确保 MySQL 数据库系统高可用性提供全面指导。
|
6月前
|
人工智能 分布式计算 调度
打破资源边界、告别资源浪费:ACK One 多集群Spark和AI作业调度
ACK One多集群Spark作业调度,可以帮助您在不影响集群中正在运行的在线业务的前提下,打破资源边界,根据各集群实际剩余资源来进行调度,最大化您多集群中闲置资源的利用率。
|
10月前
|
存储 分布式计算 并行计算
【赵渝强老师】Spark中的RDD
RDD(弹性分布式数据集)是Spark的核心数据模型,支持分布式并行计算。RDD由分区组成,每个分区由Spark Worker节点处理,具备自动容错、位置感知调度和缓存机制等特性。通过创建RDD,可以指定分区数量,并实现计算函数、依赖关系、分区器和优先位置列表等功能。视频讲解和示例代码进一步详细介绍了RDD的组成和特性。
189 0
|
7月前
|
分布式计算 Spark
【赵渝强老师】Spark RDD的依赖关系和任务阶段
Spark RDD之间的依赖关系分为窄依赖和宽依赖。窄依赖指父RDD的每个分区最多被一个子RDD分区使用,如map、filter操作;宽依赖则指父RDD的每个分区被多个子RDD分区使用,如分组和某些join操作。窄依赖任务可在同一阶段完成,而宽依赖因Shuffle的存在需划分不同阶段执行。借助Spark Web Console可查看任务的DAG图及阶段划分。
298 15
|
7月前
|
存储 缓存 分布式计算
【赵渝强老师】Spark RDD的缓存机制
Spark RDD通过`persist`或`cache`方法可将计算结果缓存,但并非立即生效,而是在触发action时才缓存到内存中供重用。`cache`方法实际调用了`persist(StorageLevel.MEMORY_ONLY)`。RDD缓存可能因内存不足被删除,建议结合检查点机制保证容错。示例中,读取大文件并多次调用`count`,使用缓存后执行效率显著提升,最后一次计算仅耗时98ms。
159 0
【赵渝强老师】Spark RDD的缓存机制
|
8月前
|
存储 分布式计算 调度
Spark Master HA 主从切换过程不会影响到集群已有作业的运行, 为什么?
Spark Master 的高可用性(HA)机制确保主节点故障时,备用主节点能无缝接管集群管理,保障稳定运行。关键在于: 1. **Driver 和 Executor 独立**:任务执行不依赖 Master。 2. **应用状态保持**:备用 Master 通过 ZooKeeper 恢复集群状态。 3. **ZooKeeper 协调**:快速选举新 Master 并同步状态。 4. **容错机制**:任务可在其他 Executor 上重新调度。 这些特性保证了集群在 Master 故障时仍能正常运行。
zdl
|
10月前
|
消息中间件 运维 大数据
大数据实时计算产品的对比测评:实时计算Flink版 VS 自建Flink集群
本文介绍了实时计算Flink版与自建Flink集群的对比,涵盖部署成本、性能表现、易用性和企业级能力等方面。实时计算Flink版作为全托管服务,显著降低了运维成本,提供了强大的集成能力和弹性扩展,特别适合中小型团队和业务波动大的场景。文中还提出了改进建议,并探讨了与其他产品的联动可能性。总结指出,实时计算Flink版在简化运维、降低成本和提升易用性方面表现出色,是大数据实时计算的优选方案。
zdl
423 56
|
10月前
|
SQL 存储 大数据
单机顶集群的大数据技术来了
大数据时代,分布式数仓如MPP成为热门技术,但其高昂的成本让人望而却步。对于多数任务,数据量并未达到PB级,单体数据库即可胜任。然而,由于SQL语法的局限性和计算任务的复杂性,分布式解决方案显得更为必要。esProc SPL作为一种开源轻量级计算引擎,通过高效的算法和存储机制,实现了单机性能超越集群的效果,为低成本、高效能的数据处理提供了新选择。
|
9月前
|
存储 负载均衡 监控
揭秘 Elasticsearch 集群架构,解锁大数据处理神器
Elasticsearch 是一个强大的分布式搜索和分析引擎,广泛应用于大数据处理、实时搜索和分析。本文深入探讨了 Elasticsearch 集群的架构和特性,包括高可用性和负载均衡,以及主节点、数据节点、协调节点和 Ingest 节点的角色和功能。
388 0

热门文章

最新文章