当前位置: 首页 > article >正文

Spark RDD(弹性分布式数据集)的深度理解

RDD(弹性分布式数据集)的深度理解

  1. RDD 是分布式计算的核心抽象

    • 在 Spark 刚开始设计时,为了便于开发者理解,RDD 被设计得类似于 Scala 集合。你可以将 RDD 看作一个分布式的“神奇集合”,它支持许多 Scala 集合的操作,如 mapflatMapfilterreduce 等。
    • 不同之处:Scala 集合是本地集合,操作发生在单机内存中,而 RDD 是一个分布式集合,可以将计算分布在多个机器上。
  2. RDD 的本质

    • RDD 本身不存储真正的计算数据,而是封装了数据的描述信息:
      • 数据来源:RDD 的数据从哪里读取(如 HDFS 文件、数据库等)。
      • 操作链:RDD 上的转换操作(如 mapfilter 等)和依赖关系。
    • RDD 的操作是惰性求值的:只有在触发 Action(如 countcollect)时,RDD 才会根据操作链生成一个完整的 DAG(有向无环图)
  3. 从操作到 DAG

    • 每次对 RDD 调用转换(Transformation),Spark 会记录操作的逻辑,但不会立即执行。
    • 当触发一次 Action 操作时,Spark 会根据操作链构建一个 DAG,完成分布式调度。

Spark 中的作业调度模型

  1. 应用程序与 Job

    • Spark 的顶层任务单元是 Application,由用户提交的程序表示。
    • 每次触发 Action 操作,Spark 会启动一个 Job,该 Job 表示一个完整的 DAG 任务流。
  2. Job、Stage 和 Task 的分解

    • Job:每个 Job 会分解为多个 Stage,一个 Stage 是由一组可以并行执行的 Task 组成的计算步骤。
    • Stage:Stage 的划分依赖于 RDD 的依赖类型:
      • 窄依赖(如 mapfilter):可以直接合并到一个 Stage 中。
      • 宽依赖(如 groupByKeyjoin):会触发 shuffle 操作,导致 Stage 划分。
    • Task:Task 是 Spark 中的最小执行单元。一个 Stage 会被分割成多个 Task,每个 Task 对应一个分区的数据。
  3. Task 的本质

    • Task 是一个 Java 对象,包含以下内容:
      • 属性:记录 Task 的元数据,如数据来源、需要调用的操作函数。
      • 方法:定义了如何计算分区数据(具体逻辑由 Transformation 决定)。
    • Task 是由 Spark 自动生成的,用户不能直接操作。

RDD 的灵活性和优化策略

  1. RDD 的灵活性

    • RDD 的惰性求值特性使其非常灵活:
      • 用户可以自由组合操作,直到触发 Action 时才执行计算。
      • 计算的逻辑和依赖关系存储在 DAG 中,便于优化和调度。
  2. 优化建议

    • 减少宽依赖:尽量减少 shuffle 操作,可以通过调整操作链优化 DAG。
    • 分区优化:合理设置 RDD 的分区数量(如通过 repartitioncoalesce),避免数据倾斜。
    • 持久化:对于需要重复使用的 RDD,使用 persistcache 减少重复计算。

总结

RDD 是 Spark 分布式计算的核心抽象,它以描述数据及其依赖关系为核心,通过 DAG 将计算分解为多个 Stage 和 Task。在实际开发中,理解 RDD 的转换和操作过程,合理优化 DAG 和网络通信,是提升 Spark 性能的关键。


http://www.kler.cn/a/405410.html

相关文章:

  • Wallpaper壁纸制作学习记录03
  • 染色质重塑与心衰中的细胞间通讯机制:解读一篇Nature力作
  • 002 MATLAB语言基础
  • JavaSrcipt 函数高级
  • C语言Day 04 学习总结
  • Kafka 工作流程解析:从 Broker 工作原理、节点的服役、退役、副本的生成到数据存储与读写优化
  • 向量数据库FAISS之五:原理(LSH、PQ、HNSW、IVF)
  • 基于深度学习的机动车驾驶重量识别预测研究思路,引入注意力,以及实验验证与性能评估
  • STM32 BootLoader 刷新项目 (十一) Flash写操作-命令0x57
  • Unity开发抖音小游戏使用长音频和短音频
  • Docker Compose安装部署PostgreSQL数据库
  • 工商银行湖仓智一体创新应用实践
  • 数据结构——栈、队列
  • GCN分类预测 | 基于图卷积神经网络GCN多特征分类预测(多输入单输出) Matlab代码
  • Rust 的简介
  • 应用监控——springboot admin
  • TypeScript 的发展与基本语法
  • docker搭建私有仓库,实现镜像的推送和拉取
  • 2024 APMCM亚太数学建模C题 - 宠物行业及相关产业的发展分析和策略 完整参考论文(2)
  • ffmpeg视频滤镜:替换部分帧-freezeframes
  • sql注入报错分享(mssql+mysql)
  • 《Spring Cloud 微服务》
  • 基于Spring Boot的同城宠物照看系统的设计与实现
  • 【040】基于51单片机语音导盲仪【Proteus仿真+Keil程序+报告+原理图】
  • 雷军产品论
  • openGauss 主备架构及同步复制模式理论学习与验证测试