1. 程式人生 > >Hdoop日記Day10---RPC機制

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……最終在經過一番思考之後選擇