【hadoop】 2005-RPC协议

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


1、RPC: 远程调用协议。不同进程之间的远程方法调用。



RPC采用客户机/服务器模式。请求程序就是一个客户机,而服务提供程序就是一个服务器。首先,客户机调用进程发送一个有进程参数的调用信息到服务进程,然后等待应答信息。在服务器端,进程保持睡眠状态直到调用信息的到达为止。当一个调用信息到达,服务器获得进程参数,计算结果,发送答复信息,然后等待下一个调用信息,最后,客户端调用进程接收答复信息,获得进程结果,然后调用执行继续进行。





例如: 不同系统之间的交互,如WebService



2、以NameNode和DataNode通信为例来说明节点之间的调用




【hadoop】 2005-RPC协议_RPC






3、通过实例演示RPC通信过程


3.1 新建RPCServer


3.2 新建RPCClient


3.3 RPCServer和RPCClient分布在不同的进程下


3.4 借助Hadoop的RPC工具类实现


3.5 RPCServer 和RPCClient 分别部署到不同的机器上,然后运行RPCServer ,在通过RPCClient远程调用



package   rpc;
  

  
/**
  
 *
  
 *   @author   shenfl
  
 *
  
 */
  
public   interface   ServerProtocol{
  
            
  
               public   static   final   long   versionID   = 9876L;
  
            
  
               public   String findMetaData(String 
  fileName
  );
  
}
  

  

  

  
  
package   rpc;
  

  
import   java.io.IOException;
  

  
import   org.apache.hadoop.HadoopIllegalArgumentException;
  
import   org.apache.hadoop.conf.Configuration;
  
import   org.apache.hadoop.ipc.RPC;
  
import   org.apache.hadoop.ipc.RPC.Server;
  

  
/**
  
 *
  
 *   @author   shenfl
  
 *
  
 */
  
public   class   RPCServer 
  implements   ServerProtocol {
  

  
               @Override
  
               public   String findMetaData(String 
  fileName 
  ) {
  
                        System.   out
  .println(
  "find Meta in NameNode!" 
  );
  
                           return   fileName 
  + 
  " already is found, " 
  + 
  fileName
  
                                                +   ", 3,{blk_001,blk_002}"
  ;
  
            }
  

  
               public   static   void   main(String[] 
  args
  ) 
  throws   HadoopIllegalArgumentException, IOException {
  

  
                           /**
  
                         * use jdk proxy
  
                         */
  
                        Server   server 
  = 
  new   RPC.Builder( 
  new   Configuration()).setInstance( 
  new   RPCServer())
  
                                                                                                .setProtocol(ServerProtocol.   class
  )
  
                                                                                                .setBindAddress(   "192.168.2.31"
  )
  
                                                                                                .setPort(9999).build();
  
                           server
  .start();
  
            }
  

  
}
  

  
  

  
  
package   rpc;
  

  
import   java.io.IOException;
  
import   java.net.InetSocketAddress;
  

  
import   org.apache.hadoop.conf.Configuration;
  
import   org.apache.hadoop.ipc.RPC;
  

  
/**
  
 *   @author   shenfl
  
 *
  
 */
  
public   class   RPCClient {
  
            
  
            
  
               public   static   void   main(String[] 
  args
  ) 
  throws   IOException {
  
                        
  
                           int   port 
  = 9999;
  
                        String   hostName 
  = 
  "192.168.2.31"
  ;
  
                           /**
  
                         * get proxy object by hostName and port 
  
                         */
  
                        ServerProtocol   proxy 
  = RPC. getProxy(ServerProtocol.  class
  , 9876L, 
  new   InetSocketAddress(
  hostName
  ,
  port 
  ), 
  new   Configuration());
  
                        
  
                           /**
  
                         *  call  real method
  
                         */
  
                        String   metaData 
  = 
  proxy
  .findMetaData( 
  "/readme01.txt"
  );
  
                        System.   out
  .println(
  metaData 
  );
  
                        
  
                        RPC. stopProxy(  proxy
  );
  
            }
  

  
}


4、采用图模式描述RPC的远程方法调用





【hadoop】 2005-RPC协议_RPC_02







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