hadoop RPC

 

 

 上边是一张hadoop RPC很粗糙的类图,只包含其中主要的类关系

 

  hadoop RPC的总架构是

    Client端使用的是阻塞的Socket,

    Client的Connection内部类负责Socket的操作

        setupIOStream方法建立socket连接

        sendParam(call)方法传输客户端socket数据

        receiveResponse会阻塞等待服务端的response

 

   客户端Client没有使用NIO, 而是使用Connection线程的对象池,以ConnectionID为主键。

 

   -------------------------------------------------------------------------------------------------------------

 

Server端使用的是非阻塞的Socket 大量使用Selector

 

Server的Listener内部类负责接收Socket请求,并开启reader的线程池,在需要读取数据时,wakeup selector--唤醒读线程;Listener中的Reader内部类负责读取socket数据(具体的操作还是在Listener和Connection中,可见reader这个内部类是因为效率而后加的),读取的数据也包括hadoop的头数据,封装为Call对象,放到Server下的队列中

 

Server的Handler内部类负责获取队列中的Call对象,并且调用处理类Call,返回处理后的的value,并且调用doRespond,wakeup-selector--唤醒写线程

 

Server的Responder内部类负责写入相应信息。

 

Server只负责启动listener,handler,responder各个线程,让其各执其责。

他并不是继承与Thread,但是其包含大量Thread,所有的服务操作都要在这一个Server中进行,个人认为这也暴漏了hadoop架构的缺陷

public synchronized void start() {  
  responder.start();  //启动responder  
  listener.start();   //启动listener  
  handlers = new Handler[handlerCount];  
    
  for (int i = 0; i < handlerCount; i++) {  
    handlers[i] = new Handler(i);  
    handlers[i].start();   //逐个启动Handler  
  }  
}

 

 

   

 

 

 

 

 

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: Hadoop