• Spark网络通信分析


    之前分析过spark RPC的基本流程(spark RPC详解),其实无论是RPC还是Spark内部的数据(Block)传输,都依赖更底层的网络通信,本文将对spark的网络通信做一下剖析。

    1,概要

    对于大数据相关的基础组件(Hadoop,HBase,Spark,Kafka),网络通信部分主要有两类:Java NIO和Netty。对于Hadoop,Spark,HBase以及kafka具体使用情况如下表:

    大数据组件
    Java NIO
    Netty
    Hadoop ✔️  
    Spark   ✔️
    HBase ✔️(2.0之前) ✔️(2.0之后)
    Kafka ✔️  

    Hadoop和Kafka是基于Java NIO的,Spark之前是基于Akka,1.6之后全面改成了Netty。而HBase 2.0之前的实现是借鉴Hadoop也是基于Java NIO,2.0之后才有了Netty实现。无论是基于Netty框架还是Java NIO,网络通信的线程模型都是基于React。只不过Java NIO是显示的(从代码中可以直接看到Acceptor, Listener,Reader,Responder等相关组件),而Netty是隐形。总的来说, Netty提供了更抽象的封装,在易用性以及性能上会比Java NIO好一些(通过HBase来看,好像性能提升也不是特别明显)。

    2,Spark实现

    Spark网络通信实现所涉及的主要类图及之间的关系如下图所示:

    要点如下:

    1,TransportContext是入口,通过TransportContext可以创建TransportServer和TransportClientFactory,而TransportClientFactory可以创建TransportClient。这样负责发送数据的TransportClient和接收请求的TransportServer便创建完毕。

    2,TransportClientFactory的作用不仅仅是创建TransportClient,同时它还含有一个缓存池,用来缓存到各个不同远端的TransportClient对象。如果获取不到,则基于Netty创建Bootstrap,设置相关参数,对应的Handler,最终创建TransportClient对象。

    3,TransportServer和TransportClient都使用TransportContext中的initializePipeline来初始化一系列的handler。这些handler包括编解码器,以及TransportChannelHandler。TransportChannelHandler是一个处理输入消息的handler(Inbound),将根据不同的请求(RequestMessage or ResponseMessage)交由对应的handler(TransportRequestHandler or TransportResponseHandler)进行处理。

    4,在以上图中,有一个非常重要的类RpcHandler。RpcHandler有很多不同的具体实现(如NettyRpcHandler主要实现基于Netty的Rpc实现,ExternalShuffleBlockHandler主要用来在External Shuffle service中发送和接收数据 )。可以看到不同的RpcHandler经过TransportContext→TransportChannelHandler→TransprotRequestHandler嵌入到上面的通信框架中,从而使得该框架能够适应不同的网络通信需求。总的来说:整体通信框架不变,但是通过RpcHandler让不同网络通信场景很好的融入了。

    除此之外,网络通信过程中还涉及到了一些列的不同的消息,以及编码等,由于比较简单,不再做深入介绍。

    3,小结

    在以上基于Netty实现的网络通信中,应用主要的逻辑都封装在不同的handler中,然后通过层次感的handler设计便能够很快摸清楚整个网络通信的过程。

  • 相关阅读:
    用 ArcMap 发布 ArcGIS Server FeatureServer Feature Access 服务 PostgreSQL 版本
    ArcMap 发布 ArcGIS Server OGC(WMSServer,MapServer)服务
    ArcScene 创建三维模型数据
    ArcMap 导入自定义样式Symbols
    ArcMap 导入 CGCS2000 线段数据
    ArcMap 导入 CGCS2000 点坐标数据
    ArcGis Server manager 忘记用户名和密码
    The view or its master was not found or no view engine supports the searched locations
    python小记(3)操作文件
    pytest(2) pytest与unittest的区别
  • 原文地址:https://www.cnblogs.com/superhedantou/p/9361496.html
Copyright © 2020-2023  润新知