来源:《spark实战》讲义
[1 ] Storage
-
Storage模块主要分为两层:
• 通信层: storage模块采用的是master-slave结构来实现通信层, master和slave之间传输控制信息、状态信息,这些都是通过通信层来实现的。
• 存储层: storage模块需要把数据存储到disk或是memory上面,有可能还需replicate到远端,这都是由存储层来实现和提供相应接口。 -
Storage模块提供了统一的操作类BlockManager,外部类与storage模块打交道都需要通过调用BlockManager相应接口来实现。
-
Storage模块存取的最小单位是数据块(Block), Block与RDD中的Partition一一对应,所以所有的转换或动作操作最终都是对Block进行操作。
[2 ] Shuffle
- shuffle 中Map任务产生的结果会根据所设置的partitioner算法填充到当前执行任务所在 机器的每个桶中。
- Reduce任务启动时时,会根据任务的ID,所依赖的Map任务ID以及MapStatus从远端或本地
的BlockManager获取相应的数据作为输入进行处理。 - Shuffle数据必须持久化磁盘,不能缓存在内存。