第一段引用:http://www.tuicool.com/articles/fyuABfQ
RDD是一个分布式数据集,顾名思义,其数据应该分部存储于多台机器上。事实上,每个RDD的数据都以Block的形式存储于多台机器上,下图是Spark的RDD存储架构图,其中每个Executor会启动一个BlockManagerSlave,并管理一部分Block;而Block的元数据由Driver节点的BlockManagerMaster保存。BlockManagerSlave生成Block后向BlockManagerMaster注册该Block,BlockManagerMaster管理RDD与Block的关系,当RDD不再需要存储的时候,将向BlockManagerSlave发送指令删除相应的Block。
以我的理解RDD的block仅仅是RDD源文件的物理存储形式的单位。而我们知道spark的快速正是因为其对内存的利用。既然block是对物理存储的单位表示,那spark就用partion来表示内存空间的单位表示。block和partion就像hadoop MR和spark的对比,一一对应但是互不相关。
最后引用别人一个总结:
block位于存储空间、partion位于计算空间,
block的大小是固定的、partion大小是不固定的,
block是有冗余的、不会轻易丢失,partion(RDD)没有冗余设计(需要的话需要手动配置)、丢失之后重新计算得到。
注意一点:网上有教程说的slices其实是指partion,还是尽量说成partion吧。