美文网首页
Spark RPC 之 Executor 向Driver下载 J

Spark RPC 之 Executor 向Driver下载 J

作者: 博弈史密斯 | 来源:发表于2018-05-12 17:13 被阅读0次

    我们先回顾下 Spark 的 client 和 server 通过RPC通信流程,先看下流程图:
    client 通过 NettyRpcEndpointRef 调用 ask 通过 NettyRpcEnv 把消息传给 OutBox 的 Messages:


    OutBox 调用 send ,通过 TransportClient 然后 TransportResponseHandler 把消息发给 server:



    在 TransportClient.sendRpc 方法中,生成了 RequestID 和 message 进行绑定,client 通过 requestId 来追踪请求。

    server 通过 TransportChannelHandler 的 channelRead 收到消息,并调用 TransportRequestHandler 的 handle 方法,在这里对 requestMessage 的类型进行了区分,以分别处理。然后调用 NettyRpcEnv 的receive 方法,把消息传递给 Dispatcher,通过 Dispatcher、Inbox Messages 和 Message Loop 完成对请求消息的分发及处理,如图所示:


    然后 Dispatcher 把消息分发到 EndPoint,调用 RemoteNettyRpcCallContext RpcResponseCallBack TransportRequestHandler,把消息发给Client:


    client 还是通过 TransportChannelHandler 的 channelRead 接收消息,然后调用 TransportResponse 然后回调到 RpcResponseCallBack 的 onSuccess 方法:


    上面的流程详细的可参考:https://blog.csdn.net/u011564172/article/details/62043236

    下载 jar file

    RpcEnvFileServer 作用于 driver 程序,为executor提供jar和file的远程下载服务,内部实现有两个,NettyStreamManager、HttpBasedFileServer,底层实现分别为netty和jetty,同时介绍了RpcEnvFileServer提供下载服务的流程:
    NettyStreamManager:


    上面这个流程 和 server 接收 client 消息一样的,只不过是 在 TransportRequestHandler 的 handle 方法中 对 requestMessage 做了区分,如果是 Stream 类型消息,则调用 processStreamRequest 方法:



    handle方法中处理Stream请求的processStreamRequest方法,如上图,StreamManager调用openStream方法,返回file对象的封装,至此,流程结束。

    相关文章

      网友评论

          本文标题:Spark RPC 之 Executor 向Driver下载 J

          本文链接:https://www.haomeiwen.com/subject/vwhhdftx.html