Spark消息通信原理(一)——Spark消息通信架构

在Spark中定义了通信框架的接口,这些接口中调用了Netty的具体方法(在spark2.x前,使用的是Akka)。各接口和实现类的关系如下图所示。

将终端(EndPoint)注册到Rpc环境中:

在各个模块中,如DriverEndPoint、ClientEndPoint、Master、Worker等,会先使用RpcEnv的静态方法创建RpcEnv实例,然后实例化终端,由于终端都是继承与ThreadSafeEpcEndPoint,即创建的终端实例属于线程安全的,接着调用RpcEnv的启动终端方法setupEndPoint,将终端和其应用的引用注册到RpcEnv中。换句话说,其他对象只要获取终端引用,就可以与其进行通信。

以master.scala为例,startRpcEnvAndEndPoint方法中,启动消息通信框架的源码:

def startRpcEnvAndEndPoint(host:String, port:Int, webUiPort:Int, conf:SparkConf):(RpcEnv, Int, Option[Int]) = {
    val securityMgr = new SecurityManager(conf)
    val rpcEnv = RpcEnv.create(SYSTEM_NAME, host, port, conf, securityMgr)
    val masterEndPoint = rpcEnv.setupEndPoint(ENDPOINT_NAME, new Master(rpcEnv, rpcEnv.address, webUiPort, securityMgr, conf))    //注册master终端
    val portsResponse = masterEndPoint.askWithRetry[BoundPortsResponse](BoundPortsRequest)(rpcEnv, portsResponse.webUIPort, portsResponse.restPort)
}

当然,是先有master终端,才会有worker终端。

原文地址:https://www.cnblogs.com/SysoCjs/p/11345153.html

时间: 2024-08-30 02:31:07

Spark消息通信原理(一)——Spark消息通信架构的相关文章

RocketMQ源码分析之RocketMQ事务消息实现原理中篇----事务消息状态回查

上节已经梳理了RocketMQ发送事务消息的流程(基于二阶段提交),本节将继续深入学习事务状态消息回查,我们知道,第一次提交到消息服务器时消息的主题被替换为RMQ_SYS_TRANS_HALF_TOPIC,本地事务执行完后如果返回本地事务状态为UN_KNOW时,第二次提交到服务器时将不会做任何操作,也就是说此时消息还存在与RMQ_SYS_TRANS_HALF_TOPIC主题中,并不能被消息消费者消费,那这些消息最终如何被提交或回滚呢? 原来RocketMQ使用TransactionalMessa

[大数据性能调优] 第一章:性能调优的本质、Spark资源使用原理和调优要点分析

本課主題 大数据性能调优的本质 Spark 性能调优要点分析 Spark 资源使用原理流程 Spark 资源调优最佳实战 Spark 更高性能的算子 引言 我们谈大数据性能调优,到底在谈什么,它的本质是什么,以及 Spark 在性能调优部份的要点,这两点让直式进入性能调优都是一个至关重要的问题,它的本质限制了我们调优到底要达到一个什么样的目标或者说我们是从什么本源上进行调优.希望这篇文章能为读者带出以下的启发: 了解大数据性能调优的本质 了解 Spark 性能调优要点分析 了解 Spark 在资

Spark Shuffle 堆外内存溢出问题与解决(Shuffle通信原理)

Spark Shuffle 堆外内存溢出问题与解决(Shuffle通信原理) 问题描述 Spark-1.6.0已经在一月份release,为了验证一下它的性能,我使用了一些大的SQL验证其性能,其中部分SQL出现了Shuffle失败问题,详细的堆栈信息如下所示: 16/02/17 15:36:36 WARN server.TransportChannelHandler: Exception in connection from /10.196.134.220:7337 java.lang.Out

kafka消息通信原理学习(1)

关于 Topic 和 Partition: Topic: 在 kafka 中,topic 是一个存储消息的逻辑概念,可以认为是一个消息集合.每条消息发送到 kafka 集群的消息都有一个类别.物理上来说,不同的 topic 的消息是分开存储的,每个 topic 可以有多个生产者向它发送消息,也可以有多个消费者去消费其中的消息. Partition: 每个 topic 可以划分多个分区(每个 Topic 至少有一个分区),同一 topic 下的不同分区包含的消息是不同的.每个消息在被添加到分区时,

使用 PHP 消息队列实现 Android 与 Web 通信

需求描述很简单:Android 发送数据到 Web 网页上. 系统: Ubuntu 14.04 + apache2 + php5 + Android 4.4 思路是 socket + 消息队列 + 服务器发送事件,下面的讲解步骤为 Android 端,服务器端,前端.重点是在于 PHP 进程间通信. Android 端比较直接,就是一个 socket 程序.需要注意的是,如果直接在活动主线程里面创建 socket 会报一个 android.os.NetworkOnMainThreadExcept

面向消息的持久通信与面向流的通信简要总结

一.面向消息的持久通信 消息队列系统为持久异步通信提供多种支持,本质是提供消息的中介存储能力,这样就不需要消息发送方和接收方在消息传输过程中都保持激活状态. 消息队列模型 应用程序可以通过在特定队列中插入消息来进行通信.消息由一系列通信服务器依次进行转发,最终送达目的地.即使在消息发送过程中接收方的机器未处于运行状态,消息也能送到. 消息队列系统的重要特征之一是,通常只能确保发送方发出的消息最终能插入到接收方的队列中,并不保证消息到达的时间,甚至不保证消息一定会得到读取,这完全由接收方来决定.

spark登录openfire以及发送单个消息,群聊消息的列表

1408171404636###<iq id="aSb6h-0" type="set" from="linux/eab452f7">  <bind xmlns="urn:ietf:params:xml:ns:xmpp-bind">    <resource>Spark 2.6.3</resource>  </bind></iq>1408171404641#

百度云消息推送机制在即时通信聊天界面的信息处理,技巧篇。

转载请注明出处:http://blog.csdn.net/yianemail/article/details/47044019 百度云消息推送,消息在客户端的处理以及消息显示方式是基于通知栏消息提示. 但是这明显不是我们想要的效果,我们想要的是利用它实现聊天,即:在通信聊天界面如何实时更新推送的消息,以不断接受的消息实现聊天. 一:我们知道利用百度消息推送,要实现自己的PushMessageReceiver. 里边重要的是有三个方法,即: public class BaiduPushReceiv

蓝牙通信第2篇:建立通信和发送文字消息,文件消息

一:简介 当两台android设备正常连接后,搜索与连接文章在这里(蓝牙搜索与连接),各自需要开启一个服务端和客户端接收消息(类似于socket),两台设备需要邦定同一个通信标识,通常是一个uuid.如:00001101-0000-1000-8000-00805F9B34FB 二:创建蓝牙服务端 1)在已配对的蓝牙列表,选择需要通信的蓝牙设备 bondDevicesListView.setOnItemClickListener(new AdapterView.OnItemClickListene

Spark job server原理初探

Spark job server是一个基于Spark的服务系统,提供了管理SparkJob,context,jar的RestFul接口. 专注标注原文链接 http://www.cnblogs.com/shenh062326/p/6193375.html 使用说明 参考 http://debugo.com/spark-jobserver/ 原理介绍 服务端JobServer首先启动,它会启动一个名叫WebApi的HttpService服务,它提供下面这几个Routes val myRoutes