首页 > 代码库 > Hadoop - YARN 通信协议

Hadoop - YARN 通信协议

一 简单介绍

      RPC协议是连接各个组件的“大动脉”,了解不同组件之间的RPC协议有助于我们更深入地学习YARN框架。

在YARN中。不论什么两个需相互通信的组件之间仅有一个RPC协议,而对于不论什么一个RPC协议,通信两方有一端是Client,还有一端为Server,且Client总是主动连接Server的,因此。YARN实际上採用的是拉式(pull-based)通信模型。


二  协议类型
    
        YARN主要由下面几个RPC协议组成,各组件的通信协议(箭头指向的组件是RPC Server,而箭头尾部的组件是RPC Client),例如以下图所看到的:
  
   
                   技术分享
                                                             YARN 组件间主要通信协议

        JobClient(作业提交client)与RM之间的协议— ApplicationClientProtocol:JobClient通过该RPC协议提交应用程序、查询应用程序状态等。
        Admin(管理员)与RM之间的通信协议—ResourceManagerAdministrationProtocol:Admin通过该RPC协议更新系统配置文件。比方节点黑白名单、用户队列权限等。


AM与RM之间的协议—ApplicationMasterProtocol:AM通过该RPC协议向RM注冊和撤销自己,并为各个任务申请资源。
       AM与NM之间的协议—ContainerManagementProtocol:AM通过该RPC要求NM启动或者停止Container,获取各个Container的使用状态等信息。


       NM与RM之间的协议—ResourceTracker:NM通过该RPC协议向RM注冊,并定时发送心跳信息汇报当前节点的资源使用情况和Container执行情况。


四 Protocol Buffers
    
        为了提高Hadoop的向后兼容性和不同版本号之间的兼容性,YARN中的序列化框架採用了Google开源的Protocol Buffers。

  除序列化/反序列化之外。Protocol Buffers也提供了RPC函数的定义方法。YARN中全部RPC函数的參数均採用Protocol Buffers定义,相比MRv1中基于Writable序列化的方法,Protocol Buffers的引入使得YARN在向后兼容性和性能方面向前迈进了一大步。

       
        以下是使用Protocol Buffers 定义 ContainerManager RPC协议的proto文件:
          
       service ContainerManagerService {           
             rpc startContainer(StartContainerRequestProto) returns (StartContainerResponseProto);
             rpc stopContainer(StopContainerRequestProto) returns (StopContainerResponseProto);               
             rpc getContainerStatus(GetContainerStatusRequestProto) returns (GetContainerStatusResponseProto); 
       } 


     除此之外还有例如以下proto文件:

            applicationmaster_protocol.proto:定义了AM与RM之间的协议—ApplicationMasterProtocol。
            applicationclient_protocol.proto:定义了JobClient(作业提交客户端)与RM之间的协议—ApplicationClientProtocol。
        containermanagement_protocol.proto:定义了AM与NM之间的协议—Container-ManagementProtocol。
        resourcemanager_administration_protocol.proto:定义了Admin(管理员)与RM之间的通信协议—ResourceManagerAdministrationProtocol。
        yarn_protos.proto:定义了各个协议RPC的參数。
        ResourceTracker.proto:定义了NM与RM之间的协议—ResourceTracker。


   除了以上几个协议。YARN还使用Protocol Buffers对MapReduce中的协议进行了又一次定义:
           MRClientProtocol.proto:定义了JobClient(作业提交client)与MRAppMaster之间的协议—MRClientProtocol。

           mr_protos.proto:定义了MRClientProtocol协议的各个參数。

五 小结
      
           YARN各个协议间的通信方式採用了pull-based通信模型。而不是push-base模型。pull-based通信模型的长处是实现比較easy简单。缺点是通信延迟比較大。与之相反的是。push-base模型实现比較复杂,可是它能够降低组件间的通信延迟。





Hadoop - YARN 通信协议