RDD的内存数据

时间:2015-04-17 16:02:39

标签: hadoop apache-spark rdd

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

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

1 个答案:

答案 0 :(得分:1)

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

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