对于Executor中执行的BlockManager总结如下:
1、一个Executor中一个BlockManager
2、一个worker中可以有多个Executor
3、对于driver端拥有的是BlockManagerMaster。
在task执行过程中,读取广播变量的时候,第一次读取广播变量的时候,BlockManager中是没有广播变量的值的,是需要BlockManager去Driver端拉取。
一个BlockManager由四部分组成:Memery Store、Disk Store、ConnectionManager、BlockTransferService;
过程解释如下:
(1)线程池中的task第一次执行去Memert Store读取广播变量的时候,Executor中的BlockManager中的ConnectionManager首先与Driver端的ConnectionManager建立连接。
(2)由Executor端的BlockTransferService去Driver端的Memery Store拉取数据。
(3)拉取数据成功后放入Executor端的Memery Store 中,供Task运行时读取。
Spark HA
在Spark中实现HA,我们采用的是Zookeeper,Zookeeper不仅有存储功能,还有选举功能。
Zookeeper中可以存储Master的元数据信息(worker、Application、Driver等),将元数据信息存储到Znode临时节点上。
问题:
(1)在master的主备切换的过程中,能否提交新的Application任务?
答:不能,因为主备切换时需要时间的,不能接受Driver和Application的注册,也就不能分配资源。
(2)在master的主备切换的过程中,已经提交的Application会受到影响吗?
答:不会,因为spark是粗粒度的资源调用,当前运行的Application已经得到了运行所需要的全部资源,所以不会受到影响。