成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Hadoop RPC遠程過程調用源碼解析及實例

大數據 Hadoop
RPC(Remote Procedure Call)遠程過程調用,它允許一臺計算機程序遠程調用另外一臺計算機的子程序,而不用去關心底層的網絡通信細節,對我們來說是透明的。經常用于分布式網絡通信中。

什么是RPC?

1、RPC(Remote Procedure Call)遠程過程調用,它允許一臺計算機程序遠程調用另外一臺計算機的子程序,而不用去關心底層的網絡通信細節,對我們來說是透明的。經常用于分布式網絡通信中。

2、Hadoop的進程間交互都是通過RPC來進行的,比如Namenode與Datanode之間,Jobtracker與Tasktracker之間等。

RPC協議假定某些傳輸協議的存在,如TCP或UDP,為通信程序之間攜帶信息數據。在OSI網絡通信模型中, RPC跨越了傳輸層和應用層。 RPC使得開發包括網絡分布式多程序在內的應用程序更加容易。

RPC采用客戶機/服務器模式。請求程序就是一個客戶機,而服務提供程序就是一個服務器。

首先,客戶機調用進程發送一個有進程參數的調用信息到服務進程,然后等待應答信息,在服務器端,進程保持睡眠狀態直到調用信息的到達為止。當一個調用信息到達,服務器獲得進程參數,計算結果,發送答復信息給client然后等待下一個調用信息,最后,客戶端調用進程接收答復信息,獲得進程結果,然后調用執行繼續進行。

RPC特點

1、透明性:遠程調用其他機器上的程序,對用戶來說就像是調用本地方法一樣。

2、高性能:RPC server能夠并發處理多個來自Client的請求(請求隊列)。3、可控性:jdk中已經提供了一個RPC框架–RMI,但是該RPC框架過于重量級并且可控之處比較少,所以Hadoop RPC實現了自定義的RPC框架。

Hadoop RPC通信

1、序列化層:Client與Server端 通信傳遞的信息采用了Hadoop里提供的序列化類或自定義Writable類型。

2、函數調用層:Hadoop RPC通過動態代理以及Java反射機制實現函數調用。

3、網絡傳輸層:Hadoop RPC采用了基于TCP/IP的socket機制。

4、服務器端框架層:RPC Server利用Java NIO以及采用了事件驅動的I/O模型,提高RPC Server的并發處理能力

Hadoop的整個體系結構就是構建在RPC之上(org.apache.hadoop.ipc)。

Hadoop RPC設計技術

1、動態代理

2、反射3、序列化4、非阻塞的異步IO(NIO)

動態代理

1、動態代理可以提供對另一個對象的訪問,同時隱藏實際對象的具體事實,代理對象對客戶隱藏了實際對象。

2、動態代理可以對請求進行其他的一些處理,在不允許直接訪問某些類,或需要對訪問做一些特殊處理等,這時候可以考慮使用代理。3)目前Java開發包中提供了對動態代理的支持,但現在只支持對接口的實現。相關的類與接口:java.lang.reflect.Proxy--類 java.lang.reflect.InvocationHandler--接口

動態代理創建對象過程:

InvocationHandler handler = new InvocationHandlerImpl(...) Proxy.newInstance(...)

具體實現可參考如下:

 

Hadoop RPC遠程過程調用源碼解析及實例

根據上圖查看hadoop2.6.0源碼

Client

Server

RPC

幾個重要的協議

ClientProtocol是客戶端(FileSystem)與NameNode通信的接口。

DatanodeProtocol是DataNode與NameNode通信的接口NamenodeProtocol是SecondaryNameNode與NameNode通信的接口。DFSClient是直接調用NameNode接口的對象。用戶代碼是通過DistributedFileSystem調用DFSClient對象,才能與NameNode打交道。

模擬Hadoop RPC通信

  1. package MyRPC; 
  2. import org.apache.hadoop.io.Text; 
  3. import org.apache.hadoop.ipc.VersionedProtocol; 
  4.  
  5. public interface MyRPCProtocal extends VersionedProtocol{ 
  6.     public static long versionID = 23234l;//很重要很重要,搞了一下午才解決掉。 
  7.     public Text test(Text t); 

 

  1. package MyRPC; 
  2.  
  3. import java.io.IOException; 
  4. import org.apache.hadoop.conf.Configuration; 
  5. import org.apache.hadoop.io.Text; 
  6. import org.apache.hadoop.ipc.ProtocolSignature; 
  7. import org.apache.hadoop.ipc.RPC; 
  8. import org.apache.hadoop.ipc.RPC.Server; 
  9.  
  10. public class RPCServer implements MyRPCProtocal{     
  11.     Server server = null
  12.     public RPCServer() throws IOException, InterruptedException{ 
  13.         //server = RPC.getServer(this,"localhost",8888,new Configuration()); 
  14.         //相對于以前的版本有略微的改動 
  15.         RPC.Builder ins = new RPC.Builder(new Configuration()); 
  16.         ins.setInstance(this); 
  17.         ins.setBindAddress("localhost"); 
  18.         ins.setPort(9999); 
  19.         ins.setProtocol(MyRPCProtocal.class); 
  20.         //RPC.setProtocolEngine(new Configuration(), MyRPCProtocal.class, RpcEngine.class); 
  21.         server = ins.build();//獲得一個server實例 
  22.         server.start(); 
  23.         server.join();   
  24.     } 
  25.  
  26.     public static void main(String[] args) throws IOException, InterruptedException { 
  27.         new RPCServer(); 
  28.     } 
  29.  
  30.     @Override 
  31.     public long getProtocolVersion(String protocol, long clientVersion) 
  32.             throws IOException { 
  33.         return MyRPCProtocal.versionID; 
  34.     } 
  35.  
  36.     @Override 
  37.     public ProtocolSignature getProtocolSignature(String protocol, 
  38.             long clientVersion, int clientMethodsHash) throws IOException {      
  39.         return new ProtocolSignature(); 
  40.     } 
  41.  
  42.     @Override 
  43.     public Text test(Text t) { 
  44.         if(t.toString().equals("RPC")){ 
  45.             return new Text("ok"); 
  46.         } 
  47.         return new Text("false"); 
  48.     } 
  49. package MyRPC; 
  50.  
  51. import java.net.InetSocketAddress; 
  52.  
  53. import org.apache.hadoop.conf.Configuration; 
  54. import org.apache.hadoop.io.Text; 
  55. import org.apache.hadoop.ipc.RPC; 
  56.  
  57. public class RPCClient { 
  58.  
  59.     private MyRPCProtocal protocal; 
  60.  
  61.     public RPCClient() throws Exception{ 
  62.         InetSocketAddress address = new InetSocketAddress("localhost",9999); 
  63.  
  64.         protocal = (MyRPCProtocal)RPC.waitForProxy 
  65.                 (MyRPCProtocal.class,MyRPCProtocal.versionID, address, new Configuration()); 
  66.         //RPC.setProtocolEngine(new Configuration(), MyRPCProtocal.class, RpcEngine.class); 
  67.     } 
  68.  
  69.     public void call(String s){ 
  70.         final Text string = protocal.test(new Text(s)); 
  71.         System.out.println(string.toString()); 
  72.     } 
  73.  
  74.     public static void main(String[] args) throws Exception { 
  75.         RPCClient client = new RPCClient(); 
  76.         client.call("RPC"); 
  77.     } 
 
責任編輯:王雪燕 來源: 翼宇軒的博客
相關推薦

2023-05-18 08:47:42

2009-06-15 10:00:08

FluorineFx庫Silverlight

2022-06-04 11:12:12

RPCREST協議

2024-08-01 17:20:55

2019-02-21 10:35:44

Windows10遠程過程調用錯誤

2012-04-11 15:41:48

JavaNIO

2022-09-14 14:41:21

RPC框架RPC協議

2014-09-02 10:43:45

RedisRPC

2024-05-31 08:45:24

2020-05-17 16:15:49

RPCJava代碼

2023-10-23 11:07:37

HTTPRPC

2024-08-29 10:12:35

RPC通信機制遠程過程

2021-11-15 14:02:27

RPCSpringBootRabbitMQ

2016-04-21 10:10:31

Java應用架構

2011-08-23 13:14:05

JDBC帶輸出參數的存儲過程

2020-01-09 11:11:35

RPC框架調用遠程

2020-01-16 10:48:21

HTTPRPC協議

2019-06-17 08:21:06

RPC框架服務

2022-02-16 16:28:22

RPC鴻蒙操作系統

2021-10-13 08:21:52

Java websocket Java 基礎
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美一级片在线观看 | 黄网站在线播放 | 欧美aⅴ | 久久夜色精品国产 | 最新日韩在线 | 95国产精品| 日韩欧美亚洲一区 | 一区二区三区韩国 | av在线播放免费 | av在线免费网 | 国产美女h视频 | 欧美精品影院 | 久久伊 | 羞羞视频免费观 | 久久极品 | 国产成人99久久亚洲综合精品 | 久色视频在线 | 久久久久国产精品一区三寸 | 91免费观看国产 | 99久久电影| 五月婷婷丁香 | 九色国产 | 九九久久久久久 | 三级黄色片在线 | 久草中文在线 | 五月综合久久 | 欧美毛片免费观看 | 久国久产久精永久网页 | 日韩精品1区2区3区 国产精品国产成人国产三级 | 一级a性色生活片久久毛片波多野 | 日韩国产精品一区二区三区 | 日本在线视频一区二区 | 嫩草视频在线看 | 久久精品国产免费 | 日本在线黄色 | 国色天香成人网 | 国产 日韩 欧美 中文 在线播放 | 在线一区视频 | 91九色视频在线 | 午夜免费在线电影 | 中文字幕av一区 |