Spark数据存储的核心是弹性分布式数据集(RDD)。RDD可以被抽象地理解为一个大的数组,这个数组中的每个元素是RDD逻辑上的一个分区(partition),每个分区分布在集群上的不同节点上。
在spark的执行过程中,RDD经过transformation算子之后,最后由action算子触发操作。逻辑上每经历一次转换,就会将RDD转换为一个新的RDD,新的RDD和旧的RDD之间通过lineage产生依赖关系,这个关系在容错中有很重要的作用,而依赖也分为宽依赖和窄依赖。转换算子的输入和输出都是RDD,RDD会被划分成很多的分区分布到集群的多个节点中。分区是个逻辑概念,变换前后的新旧分区在物理上可能是同一块内存存储。这是很重要的优化,以防止函数式数据不变性(https://www.ibm.com/developerworks/cn/导致的内存需求无限扩张