driver有blockManagerMaster,负责对各个节点上的blockManager内部管理数据的元数据就行维护,比如block增删改等操作,都会在这里维护元数据变量。
每个BlockManager在启动之后,做的第一件事,就是向BlockMangerMaster进行注册,此时BlockManagerMaster会为其创建对应的BlockManagerInfo。
使用BlockManger时执行了写操作,比如RDD运行中的一些中间数据,或者我们手动指定的Cache或Persist。比如缓存级别设置的是(MEMORY_AND_DISK),那么会优先将数据写入到内存,如果内存大小不够,在使用硬盘。
此外如果Persist指定的缓存级别是_2,带复制的这种,那么会使用BlockManagerWorker将数据Replicate一份到其他节点的BlockManager。
只要使用BlockManager执行了数据的增删改操作,那么必须将Block的BlockStatus上报到BlockManagerMaster上去,在BlockManagerMaster上,会对指定的BlockManager的BlockManagerInfo内部的BlockStatus进行增删改操作,从而达到维护元数据的功能。
每个节点上都有BlockManager,有几个关键组件DiskStore,负责对磁盘上的数据进行读写。
MemoryStore,负责对内存上的数据进行读写。
ConnectionManager,负责建立BlockManager到远程其他节点的BlockManager的网络连接。
BlockManagerWorker,负责对远程其他节点的BlockManager的数据读写。
从BlockManager读取数据时,比如说shuffle Read的操作,如果能从本地读数据,那么就和DiskStore或MomoryStore从本地来读取数据,但是如果本地没有数据的话,就会用ConnectionManager与有数据的BlockManager建立连接,然后用BlockManagerWorkrer从远程的BlockManager读取数据。
网友评论