大数据-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分区计算任务
相关推荐
lkbhua莱克瓦2413 分钟前
Java基础——集合进阶3
java·开发语言·笔记
蓝-萧24 分钟前
使用Docker构建Node.js应用的详细指南
java·后端
多喝开水少熬夜32 分钟前
Trie树相关算法题java实现
java·开发语言·算法
TTBIGDATA1 小时前
【Ambari开启Kerberos】KERBEROS SERVICE CHECK 报错
大数据·运维·hadoop·ambari·cdh·bigtop·ttbigdata
Archy_Wang_11 小时前
脚本自动生成专业Linux巡检报告
linux·运维·服务器
开利网络1 小时前
合规底线:健康产品营销的红线与避坑指南
大数据·前端·人工智能·云计算·1024程序员节
lkbhua莱克瓦241 小时前
Java基础——集合进阶用到的数据结构知识点1
java·数据结构·笔记·github
非著名架构师1 小时前
量化“天气风险”:金融与保险机构如何利用气候大数据实现精准定价与投资决策
大数据·人工智能·新能源风光提高精度·疾风气象大模型4.0
Hello.Reader2 小时前
用 CdcUp CLI 一键搭好 Flink CDC 演练环境
大数据·flink
音符犹如代码2 小时前
Java并发List实战:CopyOnWriteArrayList原理与ArrayList常见面试题
java·开发语言·面试·list