Spark的Client、Master、Worker之间的通信使用akka完成。
模块之间的通信机制可以分为基于消息的传递和基于资源共享的同步机制。
在Spak中的Client、Master和Worker实际上都是一个actor。
akka是一个基于actor模型的并发处理框架。
Actor模型
在java中,角色是通过继承UntypedActor类及实现onReceive方法来实现的。
所有对象都可以是Actor。Actor之间完全独立。Actor之间只有发送信息这一种通信方式。消息通信的方式看似不如直接方法调用来的直接,但是大量的消息可以同时执行。同时,消息让Actor之间解耦。
Actor执行的唯一事件是接收到一个消息,而一个Actor很可能会做多件事情。模型需要一种消息分发机制,把消息分发到相应的代码段,并指定各自需要的参数。
每一个Actor都拥有自己的属性和操作、邮箱、子Actor和一个监管策略,所有这些包含在一个Actor Reference里。
Actor能创建更多的Actor,发送更多的消息。
Actor模型内在设计是并行的、异步的。
Actor之间不共享状态,如果要获取其他actor的信息,必须通过消息请求方式。交换的信息存放在接收方的邮箱中。
每个actor有且仅有一个监管者,就是创建它的那个actor。如果一个actor对某种状况无法进行处理,它会发送相应的失败消息给它的监管者请求帮助,这样递归结构使得失败能够在正确的层次进行处理。