8、Spark通信模块

8.1、通信框架AKKA

先介绍一下RPC:

RCP(Remote Produce Call)是远程过程调用,基于C/S模型调用。

过程大致可以理解为本地分布式对象向主机发请求,不用自己编写底层通信本机。通过向服务器发送请求,服务器对象接受参数后,进行处理,再把处理后的结构发送回客户端。

RPC不支持对象通信,支持对象传输。

 

Spark在模块通信使用的是AKKA框架。

AKKA基于Scala开发,用于编写Actor应用。Actor模型在并行编程中是比较常用的一种模型。

Actors是一些包含状态和行为的对象。它们通过显示传递消息来进行通信,这些消息会被发送到它们的收件箱中(消息队列)。

一个Actor收到其他Actor消息后,可以根据需要作出各种相应。Actor建立一个消息队列,每次收到消息后,放入队列,而它每次也从队列中取出消息体来处理。通常这个过程是循环的,Actor可以时刻接收处理发送来的消息。

 

下图为Actor模型:

 

spark生态系统及介绍 spark的模块_RPC

AKKA Actor树形结构Actors以树结构组织起来。一个Actor可能会把自己的任务划分成更多更小、利于管理的子任务。会开启自己的子Actor,负责监督这些子Actor。

 

AKKA具有强大的并发处理能力,在国内豌豆荚做了很深的研究和实现。

Spark中并没有充分挖掘AKKA强大的并行计算能力,而是将其作为分布式系统中的RPC框架。很多组件封装为Actor,进行控制和状态通信。

AKKA的优势:

1)、并行和分布式:异步通信和分布式架构;

2)、可靠性:本地和远程都有监控和恢复;

3)、高性能:单机每秒可发送50 000 000个消息。1GB内存中可以创建和保持2 500 000个Actor对象;

4)、去中心:区别于Master/Slave模式,采用无中心节点的架构;

5)、可扩展性:可以在分布式环境下Scale out,线性扩充计算能力;

 

8.2、Client、Master和Worker间的通信

 

下图为Spark通信模型:

 

spark生态系统及介绍 spark的模块_11-1Spark通信模块_02

 

在Standalone模式下,存在以下角色:

Client:提交作业;

Master:接收作业,启动Driver和Executor,管理Worker;

Worker:管理节点资源,启动Driver和Executor。

 

Client to Master:

RegisterApplication:注册应用;

Master to Client:

RegisteredApplication:注册应用后回复给Client

ExecutorAdded:通知Client Worker已经启动了Executor,当向Worker发送LaunchExecutor时,通知Client Actor。

ExecutorUpdated:通知Client Executor状态已更新。

Master to Worker:

LaunchExecutor:启动Executor。

RegisteredWorker:Worker注册的回复。

RegiseredWorkerFailed:注册Worker失败的回复。

KillExecutor:停止Executor线程。

Worker to Master:

RegisterWorker:注册Worker。

Hearbeat:周期性的向Master发送心跳信息。

ExecutorStateChanges:通知Master、Wxecutor状态更新。

Actor之间,消息发送端通过”!”符号发送消息,接收端通过receive方法中的case模型匹配接收和处理消息。