Hdoop日記Day10---RPC機制
一、RPC(Remote Procedure Call)簡介
RPC 是遠端過程呼叫(Remote Procedure Call),即遠端呼叫其他虛擬機器中執行的javaobject。RPC 是一種客戶端/伺服器模式,那麼在使用時包括服務端程式碼和客戶端程式碼,還有我們呼叫的遠端過程物件。HDFS 的執行就是建立在此基礎之上的。本章通過分析實現一個簡單的RPC 程式來分析HDFS 的執行機理。
二、程式碼解析
1. 服務端程式碼
程式碼如下:
1 public class MyServer { 2 public static final int SERVER_PORT= 12345; 3 public static final String SERVER_ADDRESS = "localhost"; 4 public static void main(String[] args) throws IOException { 5 final Server server = RPC.getServer(new MyBiz(), SERVER_ADDRESS, 6 SERVER_PORT, new Configuration()); 7 server.start(); 8 } 9 }
核心在於第5 行的RPC.getServer 方法,該方法有四個引數:
第一個引數是被呼叫的java服務物件。
第二個引數是伺服器的地址。
第三個引數是伺服器的埠。
獲得伺服器物件後,啟動伺服器。這樣,伺服器就在指定埠監聽客戶端的請求。
2. 被呼叫的遠端物件類
程式碼如下:
1 public class MyBiz implements MyBizable{ 2 public static long BIZ_VERSION = 2345234L; 3 @Override 4 public String hello(String name){ 5 System.out.println("我被呼叫了");6 return "hello "+name; 7 } 8 @Override 9 public long getProtocolVersion(String protocol, long clientVersion) 10 throws IOException { 11 return BIZ_VERSION; 12 } 13 }
被呼叫的遠端物件實現了介面MyBizable,這裡面有兩個方法被實現,一個就是hello方法,另一個是getProtocalVersion 方法。這個hello 方法內部有個輸出語句
3. 遠端呼叫類的介面
程式碼如下:
1 public interface MyBizable extends VersionedProtocol{ 2 public abstract String hello(String name); 3 }
這個介面中的方法就是剛才的Biz 中實現的方法。介面繼承的VersionedProtocal,是hadoop 的RPC 的介面,所有的RPC 通訊必須實現這個一介面,用於保證客戶端和服務端的埠一致。服務端被呼叫的類必須繼承這個介面VersionedProtocal。
4. 客戶端程式碼,這裡使用的呼叫物件的介面
程式碼如下:
1 public class MyClient { 2 public static void main(String[] args) throws Exception { 3 final MyBizable proxy = (MyBizable)RPC.getProxy(MyBizable.class, 4 MyBiz.BIZ_VERSION, new InetSocketAddress(MyServer.SERVER_ADDRESS, 5 MyServer.SERVER_PORT), new Configuration()); 6 //呼叫介面中的方法 7 final String result = proxy.hello("world"); 8 System.out.println(result); 9 //本質是關閉網路連線 10 RPC.stopProxy(proxy); 11 } 12 }
以上程式碼中核心在於RPC.getProxy(),該方法有四個引數:
第一個引數是被呼叫的介面類。
第二個是客戶端版本號。
第三個是服務端地址。
返回的代理物件,就是服務端物件的代理,內部就是使用java.lang.Proxy 實現的。執行時,先啟動服務端,再啟動客戶端。讀者可以在服務端和客戶端輸出資訊。
從上面的RPC 呼叫中,可以看出:在客戶端呼叫的業務類的方法是定義在業務類的介面中的。該介面實現了VersionedProtocal 介面。
5. 現在我們在命令列執行jps 命令檢視輸出資訊
如圖2.1 所示。
圖 2.1
可以看到一個java 程序,是“MyServer”,該程序正是我們剛剛執行的rpc 的服務端類MyServer。大家可以聯想到我們搭建hadoop 環境時,也執行過該命令用來判斷hadoop 的程序是否全部啟動。那麼可以判斷,hadoop 啟動時產生的5 個java 程序也應該是RPC 的服務端。我們觀察NameNode 的原始碼,我們可以看到如圖下程式碼,可以看到NameNode 確實建立了RPC 的服務端。
1 // create rpc server 2 InetSocketAddress dnSocketAddr = getServiceRpcServerAddress(conf); 3 if (dnSocketAddr != null) { 4 int serviceHandlerCount = 5 conf.getInt(DFSConfigKeys.DFS_NAMENODE_SERVICE_HANDLER_COUNT_KEY, 6 DFSConfigKeys.DFS_NAMENODE_SERVICE_HANDLER_COUNT_DEFAULT); 7 this.serviceRpcServer = RPC.getServer(this, dnSocketAddr.getHostName(), 8 dnSocketAddr.getPort(), serviceHandlerCount, 9 false, conf, namesystem.getDelegationTokenSecretManager()); 10 this.serviceRPCAddress = this.serviceRpcServer.getListenerAddress(); 11 setRpcServiceServerAddress(conf); 12 }
相關推薦
Hdoop日記Day10---RPC機制
一、RPC(Remote Procedure Call)簡介 RPC 是遠端過程呼叫(Remote Procedure Call),即遠端呼叫其他虛擬機器中執行的javaobject。RPC 是一種客戶端/伺服器模式,那麼在使用時包括服務端程式碼和客戶端程式碼,還有我們呼叫的遠端過程物件。HDFS 的執行就
Python學習日記day10
1.2 命名 get input div 原則 ret 同名 傳值 1,參數陷阱 如果默認參數的只是一個可變數據類型,那麽每一次調用的時候,如果不傳值就共用這個數據類型的資源。 2,三元運算 c=a if a>b else b#如果a》b返回a,否則,返回b 變量 =
以太坊RPC機制與API實例
pro connected 再看 客戶端 side 代碼 tab 錯誤 latest 上一篇文章介紹了以太坊的基礎知識,我們了解了web3.js的調用方式是通過以太坊RPC技術,本篇文章旨在研究如何開發、編譯、運行與使用以太坊RPC接口。 關鍵字:以太坊,RPC,JS
RPC機制之AMQP協議
引用 inter nsf -a pointer sdn 提交 中間件 發送消息 openstack RPC通信Openstack 的主要組件有 Nova、Cinder、Neutron、Glance 等,分別負責雲平臺的計算、存儲、網絡資源管理。OpenStack 各組件之間
HADOOP-RPC機制
轉載自 一、RPC基本概念: 1、RPC,即Remote Procdure Call,中文名:遠端過程呼叫; (1)它允許一臺計算機程式遠端呼叫另外一臺計算機的子程式,而不用去關心底層的網路通訊細節,對我們來說是透明的。因此,它經常用於分散式網路通
[HBase] 服務端RPC機制及代碼梳理
con already oem http ade cer 同比 nging 劃分 基於版本:CDH5.4.2 上述版本較老,但是目前生產上是使用這個版本,所以以此為例。 1. 概要 說明: 客戶端API發送的請求將會被RPCServer的Listen
Hadoop RPC機制的使用
一、基礎概念 概念: RPC(Remote Procedure Call)–遠端過程呼叫,它是一種通過網路從遠端計算機程式上請求服務,而不需要了解底層網路技術的協議。RPC協議假定某些傳輸協議的存在,如TCP或UDP,為通訊程式之間攜帶資訊資料。在OSI網路通訊
【劉文彬】以太坊RPC機制與API例項
原文連結:醒者呆的部落格園,https://www.cnblogs.com/Evsward/p/eth-rpc.html 上一篇文章(【劉文彬】探路以太坊)介紹了以太坊的基礎知識,我們瞭解了web3.js的呼叫方式是通過以太坊RPC技術,本篇文章旨在研究如何開發、編譯、執行與使用
Hadoop原始碼分析之二(RPC機制之Call處理)
下面介紹在整個處理機制中怎麼把具體的Request Call轉換並呼叫到整體的實現邏輯。 主要以NameNode Client PRC Server作為例子來說明,整個轉換通過Google Protocol Buffer RPC來實現。 fina
Hadoop RPC機制-原理篇
RPC是Hadoop的基礎元件,提供分散式環境下的物件呼叫功能。之前用了三天時間分析與測試RPC,目的是想弄清楚它的整個執行機制。 概括的說,RPC採用客戶機/伺服器模式。
RPC機制與hdfs下載原始碼剖析
這裡沒有貼出原始碼,有興趣的可以debug跟蹤然後根據我的原始碼描述,看懂hdfs是怎麼下載檔案的 1.RPC機制 介面代理: public interface Businesable{ pu
Hadoop學習筆記—3.Hadoop RPC機制的使用
一、RPC基礎概念 1.1 RPC的基礎概念 RPC,即Remote Procdure Call,中文名:遠端過程呼叫; (1)它允許一臺計算機程式遠端呼叫另外一臺計算機的子程式,而不用去關心底層的網路通訊細節,對我們來說是透明的。因此,它經常用於分散式網路通訊中。 RPC協議假定某些傳輸
OceanBase RPC機制簡要說明
http://note.youdao.com/share/?id=d2163a7ba8ec1ec58e64683a961c5121&type=note RPC是OB一個比較重要的各個元件間進行通訊的實現機制。最近在看clog的程式碼,就順著ObCLogRpc這個類,簡單總結下OB進行RPC的幾種寫法
HBase原始碼分析2 – RPC機制:客戶端
先澄清一些本文中術語的涵意 客戶端 – 指的是HBase client API.提供了從使用者程式連線到HBase後臺伺服器即Master server及Region server的功能 服務端 – 即指的是HBase的Master server 及 Region serv
Hadoop詳解(二)——HDFS的命令,執行過程,Java介面,原理詳解。RPC機制
HDFS是Hadoop的一大核心,關於HDFS需要掌握的有:分散式系統與HDFS、HDFS的體系架構和基本概念、HDFS的shell操作、Java介面以及常用的API、Hadoop的RPC機制、遠端debugDistributed File System資料量越來越多,在一
閱讀Hadoop 原始碼最重要的就是明白rpc機制,client與master,master和slave的通訊
本部落格微信公共賬號:hadoop123(微訊號為:hadoop-123),分享hadoop技術內幕,hadoop最新技術進展,釋出hadoop相關職位和求職資訊,hadoop技術交流聚會、講座以及會議等。二維碼如下: 個人談談閱讀hadoop原始碼的經驗。
Hadoop RPC機制詳解
網路通訊模組是分散式系統中最底層的模組,他直接支撐了上層分散式環境下複雜的程序間通訊邏輯,是所有分散式系統的基礎。遠端過程呼叫(RPC)是一種常用的分散式網路通訊協議,他允許運行於一臺計算機的程式呼叫另一臺計算機的子程式,同時將網路的通訊細節隱藏起來,使得使用者無需額外地為這個互動作用程式設計,大大
簡易RPC框架-心跳與重連機制
依賴 tile tegra port public row edi cat ice 心跳 就是告訴其它人自己還活著。在簡易RPC框架中,采用的是TCP長連接,為了確保長連接有效,就需要客戶端與服務端之間有一種通知機制告知對方的存活狀態。 如何實現 客戶端發
簡易RPC框架-過濾器機制
sym vbo else on() alias dcb nac urb min 過濾器 字面義上理解的過濾器類似下圖,從一堆物品中篩選出符合條件的留下,不符合的丟棄。 GOF 職責鏈 GOF中有一種設計模式叫職責鏈,或者叫責任鏈,常規的UML圖如下:
CDQZ集訓DAY10 日記
math gpo 痛苦 %d body pan hid lap pen 又一次跪了,跪在了神奇的數據範圍上。 T1上來打完暴力之後覺得是數據結構題,像三維偏序,於是開始往各種數據結構上想,主席樹,線段樹+calc,平衡樹,樹套樹,CDQ……最終在經過一番思考之後選擇