spark的部分问题

driver 部分


dispatcher 的作用?

分发 rpc 消息到不同的 endpoint


driver 启动以后会有几个 endpoint ?

8个 endpoint


这8个 endpoint 分别是哪些?

endpoint-verifier

MapOutputTracker

BlockManagerMaster

BlockManagerEndpoint1

OutputCommitCoordinator

HeartbeatReceiver

CoarseGrainedScheduler

AppClient


每个 spark 组件的 spark 协议地址命名规范

spark://CoarseGrainedScheduler@192.168.232.234:37398

第一部分 spark

第二部分 组件名称

第三部分 组件所在地址

第四部分 绑定的端口


endpoint 向 dispatcher 注册的流程

1.先使用 endpoint 的套接字地址 和 endpoint 名称构造一个 RpcEndpointAddress 对象,作为地址的标识符

2.然后使用刚刚构造的地址标识符 和 rpc 环境对象,构造出一个 NettyRpcEndpointRef 对象。

备注:NettyRpcEndpointRef 的作用,如果其中的地址是本机正在监听的端口,仅仅是对地址做了封装。如果在其他主机,收到了 driver 发送的的序列化的对象,其他主机用它来监听 通过 TransportClient 对象发送的消息

3.以 endpoint 的名称为 key,包含有 endpoint 名称, endpoint 对象 , endpointRef 对象的 EndpointData 为 value,添加到 endpoints 的 map 中

备注:EndpointData 的作用,包含有一个 inbox 对象,作为收件箱,存储发送给 这个 endpoint 的 消息

4.然后将 EndpointData 对象作为 key,NettyRpcEndpointRef 对象作为 value 添加到 endpointRefs map 中

5.dispatcher 将 EndpointData 添加到 dispatcher 的消息队列 receivers 中


每个 endpoint 是如何收消息的?

每个 endpoint 都有一个对应的 EndpointData 对象

这个 EndpointData 对象有一个成员变量 inbox

inbox 作为收件箱,存放推送给 endpoint 的消息


inbox 作为收件箱是如何将异步推送给组件不同方法去处理的

inbox 有一个并发的消息队列 messages 用来存放消息

在 dispatcher 的消息队列 获取到 receivers 中的 EndpointData 以后,dispatcher 会启动这个 EndpointData 的 inbox,让 inbox 进入循环,不断的监听 messages 队列


dispatcher 如何将消息推送给指定的 endpoint

dispatcher 收到消息以后,会根据 endpoint 的名称,获取对应的 EndpointData 对象

往这个 endpoint 对象的 inbox 中推送消息


driver 的 rpc server 是哪一个?

在调用 NettyRpcEnv 的 startServer 的时候会启动一个 Rpc Server,是一个 TransportServer 对象。


driver 的 rpc server 是如何处理 rpc 消息的

TransportServer 作为 Netty 的 server 端启动,使用 RpcHandler 对象 对 netty 的 套接字通道 SocketChannel 中的消息进行处理

NettyRpcHandler 作为 RpcHandler 的子类负责具体的 rpc 处理。

将消息发送者的地址 和 RPC env 以及 代表消息的 ByteBuffer 封装成 RequestMessage

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容