spark BlockManager 解析
2019-10-14 本文已影响0人
邵红晓
- 问题: spark Broadcast 广播变量存储在哪?存储在block manager上
driver端:blockmanager master
executor端:blockmanager slave
典型主从结构的block管理集群 - block manager 还存储了什么数据?
RDDBlockId(rdd 缓存,cache presist)、ShuffleBlockId、ShuffleDataBlockId、ShuffleIndexBlockId、BroadcastBlockId、TaskResultBlockId、TempLocalBlockId、TempShuffleBlockId 8 个,spark streaming 一个 ReceiverInputDStream 接受到的数据也是先放在 BlockManager 中, 然后封装为一个 BlockRdd 进行下一步运算的。 -
block manager 结构
1、MemoryStore 内存写入操作
2、DiskStore 磁盘写入操作
image.png
block读取流程:
- 优先从本地获取,根据StorageLevel设置,如果是存储在内存中,则从本地的MemoryStore中查询,存在则读取并返回;如果是存储在磁盘上,则从本地的DiskStore中查询,存在则读取并返回。
- 本地不存在, 则会从远程的Executor读取,向远程的Driver上的BlockManagerMasterEndpoint查询对应Block ID,有哪些Executor已经保存了该Block数据,Dirver返回一个包含了该Block数据的Location列表,如果对应的Location信息与当前ShuffleMapTask执行所在Executor在同一台节点上,则会优先使用该Location,因为同一节点上的多个Executor之间传输Block数据效率更高
注意:广播变量的 block 不会汇报给 Master