spark基于akka一个任务通讯的简单流程
本文介绍spark通讯的简单流程,通过本文也可以了解简单的spark任务执行流程
1.Master 启动成功后(开启线程定时检查Worker存活与否) ,启动Worker,这时候Worker与Master间进行通讯。通讯内容:向Master注册信息(包含一些自己电脑的配置情况,方便Master后续分配任务)
之后向 Master定时发送心跳包 用以报活。
2.当用户提交任务时,机器会启动driver(注意:这里机器可以使Master也可以使Worker也可以使其他机器),driver中的sparkcontext对象会和Master建立连接,把任务信息(包括启动任务时候设置多少个核还有内存来运行任务)告知Master。同时context创建好之后会构建dag(有向无环图),开始执行tarnsformation部分。
3.Master接收到任务消息,根据任务信息,找到合适的Worker向其发送任务请求。
4.Worker接收到来自Master的任务请求,建立Excutor来执行任务。
5.Excutor根据Driver -> Master -> Worker 传来的信息知道driver的位置 与其建立通讯
6.当有向无环图 执行到action时候,通过连接开始提交作业(提交方式简介: 把无环图切成一个个stage然后按顺序提交,提交内容是一个个task把它们放到一个taskSet发送)。
7.Excutor执行任务,从hdfs等集群获取数据在内存中计算(图中task数量和数据在集群的分块数一致),若内存放不下会放入磁盘中。
8.若计算中需要聚合,各Excutor会把计算好的数据汇聚到driver中聚合,若数据发生改变要写入到hdfs或者redis等 由Excutor来完成。
名词解释: 有向无环图(包含transformation和action): 由延迟加载的rdd(数据集)和触发计算的rdd组成,即transformation和action,他们间的一系列转换生成了有向无环图(dag)