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

Hadoop RPC遠程過程調(diào)用源碼解析及實例

大數(shù)據(jù) Hadoop
RPC(Remote Procedure Call)遠程過程調(diào)用,它允許一臺計算機程序遠程調(diào)用另外一臺計算機的子程序,而不用去關(guān)心底層的網(wǎng)絡(luò)通信細節(jié),對我們來說是透明的。經(jīng)常用于分布式網(wǎng)絡(luò)通信中。

什么是RPC?

1、RPC(Remote Procedure Call)遠程過程調(diào)用,它允許一臺計算機程序遠程調(diào)用另外一臺計算機的子程序,而不用去關(guān)心底層的網(wǎng)絡(luò)通信細節(jié),對我們來說是透明的。經(jīng)常用于分布式網(wǎng)絡(luò)通信中。

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

RPC協(xié)議假定某些傳輸協(xié)議的存在,如TCP或UDP,為通信程序之間攜帶信息數(shù)據(jù)。在OSI網(wǎng)絡(luò)通信模型中, RPC跨越了傳輸層和應(yīng)用層。 RPC使得開發(fā)包括網(wǎng)絡(luò)分布式多程序在內(nèi)的應(yīng)用程序更加容易。

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

首先,客戶機調(diào)用進程發(fā)送一個有進程參數(shù)的調(diào)用信息到服務(wù)進程,然后等待應(yīng)答信息,在服務(wù)器端,進程保持睡眠狀態(tài)直到調(diào)用信息的到達為止。當一個調(diào)用信息到達,服務(wù)器獲得進程參數(shù),計算結(jié)果,發(fā)送答復(fù)信息給client然后等待下一個調(diào)用信息,最后,客戶端調(diào)用進程接收答復(fù)信息,獲得進程結(jié)果,然后調(diào)用執(zhí)行繼續(xù)進行。

RPC特點

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

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

Hadoop RPC通信

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

2、函數(shù)調(diào)用層:Hadoop RPC通過動態(tài)代理以及Java反射機制實現(xiàn)函數(shù)調(diào)用。

3、網(wǎng)絡(luò)傳輸層:Hadoop RPC采用了基于TCP/IP的socket機制。

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

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

Hadoop RPC設(shè)計技術(shù)

1、動態(tài)代理

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

動態(tài)代理

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

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

動態(tài)代理創(chuàng)建對象過程:

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

具體實現(xiàn)可參考如下:

 

Hadoop RPC遠程過程調(diào)用源碼解析及實例

根據(jù)上圖查看hadoop2.6.0源碼

Client

Server

RPC

幾個重要的協(xié)議

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

DatanodeProtocol是DataNode與NameNode通信的接口NamenodeProtocol是SecondaryNameNode與NameNode通信的接口。DFSClient是直接調(diào)用NameNode接口的對象。用戶代碼是通過DistributedFileSystem調(diào)用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.     } 
 
責(zé)任編輯:王雪燕 來源: 翼宇軒的博客
相關(guān)推薦

2023-05-18 08:47:42

2009-06-15 10:00:08

FluorineFx庫Silverlight

2022-06-04 11:12:12

RPCREST協(xié)議

2024-08-01 17:20:55

2019-02-21 10:35:44

Windows10遠程過程調(diào)用錯誤

2012-04-11 15:41:48

JavaNIO

2022-09-14 14:41:21

RPC框架RPC協(xié)議

2024-05-31 08:45:24

2014-09-02 10:43:45

RedisRPC

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應(yīng)用架構(gòu)

2011-08-23 13:14:05

JDBC帶輸出參數(shù)的存儲過程

2020-01-09 11:11:35

RPC框架調(diào)用遠程

2020-01-16 10:48:21

HTTPRPC協(xié)議

2019-06-17 08:21:06

RPC框架服務(wù)

2022-02-16 16:28:22

RPC鴻蒙操作系統(tǒng)

2021-10-13 08:21:52

Java websocket Java 基礎(chǔ)
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 久久精品视频12 | 日日夜夜操天天干 | 精品福利av导航 | 99视频在线 | 亚洲成人免费 | 日韩精品一区二区三区中文字幕 | 久久国产精品久久国产精品 | 国产午夜精品一区二区三区嫩草 | 国产精品国产自产拍高清 | 日韩视频在线播放 | 亚洲第一天堂无码专区 | h视频免费在线观看 | 国产精品久久久乱弄 | 日本三级全黄三级三级三级口周 | 国产日韩欧美 | 欧美日韩中文在线观看 | 日日射影院 | 欧美精品三区 | 国产美女精品视频免费观看 | 久草视频在线播放 | 久久99蜜桃综合影院免费观看 | 精品国产乱码久久久久久丨区2区 | 草久久久| 国产69精品久久久久777 | 麻豆久久久9性大片 | 国产精品精品 | 欧美亚洲日本 | 欧美区在线 | 精品免费视频一区二区 | 国产国产精品久久久久 | 日本欧美在线 | 99久热在线精品视频观看 | 成人综合一区二区 | av在线电影网 | 久草在线| 一区二区三区视频在线观看 | 亚洲一区二区av在线 | 成人精品国产一区二区4080 | 亚洲一级视频在线 | 欧美成人精品在线 | 国产精品毛片无码 |