版权声明:本文为博主原创文章,未经博主允许不得转载!!
欢迎访问:https://blog.youkuaiyun.com/qq_21439395/article/details/82817475
交流QQ: 824203453
-
Spark RPC简介
RPC(Remote Procedure Call Protocol)--远程过程调用协议
RPC是分布式项目的基石,Spark RPC被deploy、scheduler、shuffle、storage等多个模块使用,掌握了rpc就能轻松掌握spark的底层运行机制。spark底层通信最初使用akka的actor实现,并在spark1.4版本标准化了rpc相关的接口。
spark为了底层通信框架的通用性,改造出来的一个简易的rpc通信框架。
标准化接口是为了能够实现基于其他技术的rpc方案,在spark1.6版本中rpc的默认实现由基于akka的actor转变为基于netty,解决了实际项目中可能存在的akka版本问题。
使用netty替代akka的原因:
- akka在传输大文件的时候,性能不佳。
- 很多Spark用户也使用Akka,但是由于Akka不同版本之间无法互相通信,这就要求用户必须使用跟Spark完全一样的Akka版本,导致用户无法升级Akka。
简而言之,spark虽然在1.6之后,使用Netty替代了Akka,但是由于1.4版本中做了接口规范。接口规范的语法风格非常类似于Akka,最底层的服务可以任意选用netty或者Akka。
所以,如果掌握了akka的通信机制,那么就能轻松上手spark源码了。而无需掌握netty。
在讲spark的源码分析之前,需要先熟悉下akka的通信机制,以及了解一下netty。
-
Akka快速上手
Akka ,scala语言开发的用于处理分布式的框架。
Actor 模型。
只能通过发送消息来进行通信。
Actor: 参与通信的双方,都是一个Actor。
ActorSystem: Actor 都由ActorSystem来创建。
一个jvm中,有一个ActorySystem,有多个Actor。
Actor, ActorRef, ActorSystem
简单示例
spark简易RPC通信框架。利用Akka,Actor来实现的。
完整示例代码可以加qq:824203453索取。
或关注www.51doit.com,源码解析视频稍后会同步在腾讯课堂上架。敬请关注:
https://51doit.ke.qq.com/#tab=1&category=-1
-
-
Netty的快速上手
-
Netty是由JBOSS提供的一个java开源框架。Netty提供异步的、事件驱动的网络应用程序框架和工具,用以快速开发高性能、高可靠性的网络服务器和客户端程序。
通俗而言,就是个程序,封装了java NIO。
是建立在客户端和服务端之间的,用于Socket通信。
Spark2.2中使用的netty 版本:
netty的maven依赖:
<!-- Netty --> |
-
spark中的网络通信
spark中的网络通信无处不在:
driver和master的通信,比如driver会向master发送RegisterApplication消息
master和worker的通信,比如worker会向master上报worker上运行Executor信息
executor和driver通信,executor运行在worker上,spark的tasks被分发到运行在各个executor中,executor需要通过向driver注册,心跳,发送任务运行结果等操作。
其他的一些通信
通信主要分为两类:
1,汇报信息。 task状态,executor状态,worker状态等
2,传输数据,spark shuffle(也就是reduce从上游map的输出中汇集输入数据)阶段存在大量的数据传输。
在spark中这两种采用了不同的实现方式,第一种, spark基于netty实现了简单的rpc框架,第二种基于netty实现了数据传输服务。
版权声明:本文为博主原创文章,未经博主允许不得转载!!
欢迎访问:https://blog.youkuaiyun.com/qq_21439395/article/details/82817475
交流QQ: 824203453