什么是弹性分布式数据集 (RDD)?

各种形状的 3D 概念效果图

作者

James Holdsworth

Content Writer

Matthew Kosinski

Staff Editor

IBM Think

什么是弹性分布式数据集 (RDD)?

弹性分布式数据集 (RDD) 是不可篡改、可容错的元素集合,可以分布在多个集群节点上以并行处理。RDD 是开源数据处理引擎 Apache Spark 中的基本数据结构。

Spark 的开发是为了弥补 MapReduce 的缺点,MapReduce 是一种将大型数据处理任务“分块”,划分为多个较小的并行任务的编程模型。

MapReduce 可能很慢而且效率低下。它需要复制(在不同位置维护多个数据副本)、序列化(协调对多个程序使用的资源的访问)和密集的 I/O(磁盘存储空间的输入/输出)。

Spark 专用于减少不必要的处理。MapReduce 将中间数据写入磁盘,而 Spark 使用 RDD 在内存中缓存和计算数据。因此,Spark 的分析引擎处理数据的速度比 MapReduce 快 10-100 倍。1

RDD 和 Apache Spark

Apache Spark 是一种快速、开源、大规模的数据处理引擎,通常用于机器学习 (ML)人工智能 (AI) 应用程序。可将 Spark 视作 Hadoop 的改进版,更具体地说,是对 Hadoop 原生数据处理框架 MapReduce 的改进。

Spark 通过在大型计算机集群之间分配数据处理工作流程来实现扩展,并利用内置功能支持多个节点上的并行计算以及容错。

它包括许多应用程序编程接口 (API),适用于常见的数据科学数据工程编程语言,包括 Java™Python (PySpark)、ScalaR

Spark 使用 RDD 来管理和处理数据。每个 RDD 被分成多个逻辑分区,这些分区可以同时在不同的集群节点上进行计算。用户可以执行两种类型的 RDD 操作:转换和行动。

  • 转换是用于创建新 RDD 的操作。

  • 操作指示 Spark 应用计算并将结果传回 Spark 驱动程序(管理 Spark 作业的进程)。

Spark 对内存中的 RDD 执行转换操作和行动操作,这是 Spark 速度更快的关键。Spark 还可以将数据存储在内存中或写入磁盘以增加持久性。

小球在轨道上滚动的三维设计

最新的 AI 新闻 + 洞察分析

在每周的 Think 时事通讯中,发现专家精选的有关 AI、云等的洞察分析和新闻。 

RDD 的工作原理

弹性分布式数据集具有弹性且为分布式。那意味着:

有弹性

RDD 的名称中包含“弹性”,因为它们跟踪数据沿袭信息,以便在发生故障时可以重建丢失的数据,从而使 RDD 具有高度容错能力。

作为这种数据弹性的一个例子,假设在处理一个 RDD 分区期间一个执行器核心丢失。驱动程序将检测到该故障,并将该分区重新分配给其他执行器核心。

分布式

RDD 之所以称为“分布式”,是因为它们被拆分为较小的数据组,这些数据组可以分发到不同的计算节点并同时进行处理。

除了这两个核心特征外,RDD 还有其他一些特性,决定了其在 Spark 中的重要性和操作。

内存计算

许多数据处理框架(尤其是 MapReduce)必须对外部存储系统执行多次读取或写入操作,从而导致性能下降。RDD 可帮助 Apache Spark 解决此问题。

RDD 使用内存中计算将迭代操作的中间结果存储在随机存取存储器 (RAM) 中,从而减少磁盘 I/O。使用内存中计算和存储可以支持更快的访问和近乎实时的处理。

RDD 还有助于缩短机器学习算法的训练时间,并加快大规模大数据分析的处理速度。使用内存计算可以减少访问数据存储所需的时间。

惰性求值

在 Spark 中,所有转换(用于创建新 RDD 的操作)都是“惰性的”,意味着数据不会立即被加载或计算。

相反,转换操作在有向无环图 (DAG) 中被跟踪,并且仅在驱动程序有特定的行动调用时才运行。

驱动程序指示 Spark 作业上的集群计算的主要功能和操作,例如聚合、收集、计数或将输出保存到文件系统。

数十种可能的行动操作和转换操作包括 aregateByKey、countByKey、flatMap、groupByKey、reduceByKey 和 sortbyKey。

惰性求值有助于消除不必要的处理和删减不必要的计算,从而优化数据处理流水线

分区

Spark 在多个节点上自动对 RDD 进行分区,这样它就可以处理单一节点无法容纳的海量数据。为了避免损坏,每个单独的分区都存储在一个节点上,而不是分布在多个节点上。

使用 RDD,组织将能够定义计算分区的位置,以便任务可以在靠近所需数据的位置运行。这种位置分配方式有助于提高处理速度。

此外,还可以增加集群中的执行器(执行驱动程序分配的任务的计算机)的数量,以增强系统的并行处理能力。输出中的并行度取决于父 RDD 中的分区数量。

可以在集群的逻辑分区中创建 RDD,以便在多个节点上实现并行操作。可以从各种稳定的存储源创建 RDD,例如 Amazon Web Services (AWS) S3、Hadoop 分布式文件系统 (HDFS)Apache HBase 和 Cassandra。也可以通过 Scala 和 Python 等编程语言来创建 RDD。

AI Academy

数据管理是生成式 AI 的秘诀吗?

深入了解为什么高质量数据对于成功使用生成式 AI 至关重要。

持久性

Spark RDD 可以跨操作将数据集缓存在内存中。每个节点都可以将其计算出的分区存储在内存中,并在对数据集或结果数据集执行后续操作时重新使用。这种持久性可以大幅加快处理速度。

Spark 还为用户提供了交互式存储选项,让他们能够控制数据的存储方式。数据可以存储在内存或磁盘中,或同时采用两者相结合的方式。

不可篡改性

RDD 是不可变的,这意味着它们在创建后无法修改。不变性有助于数据在多次操作中保持稳定

这还能让多个进程共享数据变得更容易、更安全,并有助于防止不同线程同时更新而造成的数据损坏。

虽然 RDD 不可篡改,但用户可以通过对现有 RDD 执行转换操作来创建新的 RDD,这样,就可以在不更改原始数据的情况下更新数据集。

非结构化数据的容量

RDD 可以处理非结构化和结构化数据。 在处理非结构化数据时,可以从多种类型的数据库、媒体流或文本文件中提取信息,而无需固定架构或创建 DataFrame。

也就是说,用户可以在 Spark 中创建 DataFrame,这样就可以利用某些优化来提高性能。

相关解决方案
数据管理软件和解决方案

设计数据战略,消除数据孤岛、降低复杂性并提高数据质量,以获得卓越的客户和员工体验。

深入了解数据管理解决方案
IBM watsonx.data™

watsonx.data 支持您通过开放、混合和已治理数据,利用您的所有数据(无论位于何处)来扩展分析和 AI。

了解 watsonx.data
数据和分析咨询服务

通过 IBM® Consulting 发掘企业数据的价值,建立以洞察分析为导向的组织,实现业务优势。

了解分析服务
采取下一步行动

设计数据战略,消除数据孤岛、降低复杂性并提高数据质量,以获得卓越的客户和员工体验。

深入了解数据管理解决方案 了解 watsonx.data
注释

1 Apache Spark™,软件基金会,2024 年 12 月 20 日。