基本概念 模塊 RPC 通常采用客戶機/服務器模型。請求程序是客戶機,服務提供程序則是一個服務器。包括以下幾個模塊 通信模塊:兩個相互協作的通信模塊實現請求-應答協議。同步方式和異步方式。 Stub程序:客戶端和服務器端均包含Stub程序,代理程序。它使得
基本概念
模塊
RPC通常采用客戶機/服務器模型。請求程序是客戶機,服務提供程序則是一個服務器。包括以下幾個模塊
通信模塊:兩個相互協作的通信模塊實現請求-應答協議。同步方式和異步方式。
Stub程序:客戶端和服務器端均包含Stub程序,代理程序。它使得遠程函數調用表現的跟本地調用一樣,對用戶程序完全透明。
在客戶端,它表現的就像一個本地程序,但不直接執行本地調用,而是將請求信息通過網絡模塊發送給服務器端。
在服務器端,解碼請求消息中的參數,調用相應的服務過程和編碼應答結果的返回值。
調度程序:接收來自通信模塊的請求消息,并根據其中的標識選擇一個Stub程序處理。線程池處理。
客戶程序/服務過程:請求的發出者和請求的處理者。
步驟
1.客戶程序以本地方式調用系統產生的Stub程序。
2.該Stub程序將函數調用信息按照網絡通信模塊的要求封裝成消息包。并交給通信模塊發送到遠程服務器端。
3.遠程服務器端接收此消息后,將此消息發送給相應的Stub程序。
4.Stub程序拆封消息,形成被調過程要求的形式,并調用對應的函數。
5.被調用函數按照所獲參數執行,并將結果返回給Stub程序。
6.Stub程序將此結果封裝成消息,通過網絡通信模塊逐級地傳送給客戶程序。
HadoopRPC
接口:
public static VersionedProtocol getProxy/waitForProxy():構造一個客戶端代理對象,用于向服務器發送RPC請求。public static Server getServer():為某個協議示例構造一個服務器對象,用于處理客戶端發送的請求。
1.定義RPC協議。RPC協議是客戶端與服務器端之間的通信接口,它定義了服務器端對外提供的服務接口。interface ClientProtocol extends org.apache.hadoop.ipc.VersionedProtocol{public static final long versionID=1L;String echo(String value) throws IOException;int add(int v1,int v2) throws IOException;}2.實現RPC協議。public static class ClientProtocolImpl implements ClientProtocl{public long getProtocolVersion(String protocol,long clientVersion){return ClientProtocol.versionID ;}public String echo(String value) throws IOException{return value;}public int add(int v1,int v2) throws IOException{return v1+v2;}}3.構造并啟動RPC Serverserver = RPC.getServer(new ClientProtocolImpl(),serverHost,serverPort,numHandlers,false,conf);//numHandlers表示服務器端處理請求的線程數目。server.start();4.構造RPC Client,并發送RPC請求。proxy = (ClientProtocol)RPC.getProxy(ClientProtocol.class,ClientProtocol.versionID,addr,conf);int result = proxy.add(4,5);String echoResult = proxy.echo("hello");
原文地址:解析MapReduce原理–筆記(9)hadoopRPC基礎, 感謝原作者分享。
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com