RDD 的内存数据

In-Memory data for RDD

我一直在使用 Spark,我很好奇 RDD 究竟是如何工作的。我知道 RDD 是指向数据的指针。如果我尝试为 HDFS 文件创建 RDD,我知道 RDD 将是指向 HDFS 文件上实际数据的指针。

我不明白数据在内存中的存储位置。当任务发送到工作节点时,特定分区的数据是否存储在该工作节点的内存中?如果是这样,当 RDD 分区存储在 worker node1 的内存中,但 worker node2 必须为 RDD 的同一分区计算任务时会发生什么? worker node2 是否与 worker node1 通信以获取分区的数据并将其存储在自己的内存中?

原则上,任务在执行器之间划分,每个执行器代表其自己独立的数据块(例如,来自 HDFS 文件或文件夹)。任务的数据加载到该执行程序的本地内存中。可以在同一任务上链接多个转换。

但是,如果转换需要从多个执行器中提取数据,则将创建一组新任务,并且先前任务的结果将被洗牌并重新分配给执行器。例如,许多 *byKey 转换将通过 HDFS 对整个数据进行洗牌,以便执行者可以执行第二组任务。打乱数据的次数和数据量对Spark的性能至关重要。