91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Hadoop之RPC簡單使用(遠程過程調用協議)

發布時間:2020-05-14 19:15:36 來源:網絡 閱讀:586 作者:26度出太陽 欄目:大數據

一、RPC概述

  RPC是指遠程過程調用,也就是說兩臺不同的服務器(不受操作系統限制),一個應用部署在Linux-A上,一個應用部署在Windows-B或Linux-B上,若A想要調用B上的某個方法method(),由于不在一個內存空間,不能直接調用,需要通過網絡來表達調用的語意和傳達調用的參數。

  樓主在接觸RPC之前,用得最多的莫過于WebService。WebService可以說是在RPC發展的基礎之上。RPC的協議有很多,比如最早的CORBA,Java RMI,Web Service等,又比如現在阿里巴巴的Dubbo,Apache下的hadoop項目。該篇樓主主要以hadoop的RPC為例。

  hadoop為何要使用RPC?在HDFS中,我們通過jsp可查看到有DataNode,NameNode,SecondaryNameNode主要進程(樓主只啟動了HDFS),我們客戶端Client與NameNode通信,NameNode與DataNode的通信,都是在不同進程間,不同系統間的通信。

Hadoop之RPC簡單使用(遠程過程調用協議)

  

  二、RPC流程

 

  通過下圖,我們簡單分析RPC的執行流程:

  Hadoop之RPC簡單使用(遠程過程調用協議)

 

  首先,要解決通訊的問題,主要是通過在Client和Server之間建立TCP連接,遠程過程調用的所有交換的數據都在這個連接里傳輸。連接可以是按需連接,調用結束后就斷掉,也可以是長連接,多個遠程過程調用共享同一個連接。

  第二,要解決尋址的問題,也就是說,A服務器上的應用怎么告訴底層的RPC框架,如何連接到B服務器(如主機或IP地址)以及特定的端口,方法的名稱名稱是什么,這樣才能完成調用。

  第三,當Client上的應用發起遠程過程調用時,方法的參數需要通過底層的網絡協議如TCP傳遞到Server,由于網絡協議是基于二進制的,內存中的參數的值要序列化成二進制的形式,也就是序列化(Serialize),通過尋址和傳輸將序列化的二進制發送給B服務器。

  第四,Server收到請求后,需要對參數進行反序列化(序列化的逆操作),恢復為內存中的表達方式,然后找到對應的方法(尋址的一部分)進行本地調用,然后得到返回值。

  三、hadoop—RPC的簡單使用

  定義接口Bizable:

  

1 package cn.jon.hadoop.rpc;2 3 public interface MyBizable {4     long versionID = 123456;//該字段必須要有,不然會報java.lang.NoSuchFieldException: versionID異常5     public String doSomething(String str);6 }

  服務端RPCServer實現MyBizable接口并綁定IP地址及端口號:

Hadoop之RPC簡單使用(遠程過程調用協議)

package cn.jon.hadoop.rpc;import org.apache.hadoop.conf.Configuration;import org.apache.hadoop.ipc.RPC;import org.apache.hadoop.ipc.Server;public class RPCServer implements MyBizable {

    @Override    public String doSomething(String str) {        return str;
    }    /**
     * @param args
     * @throws Exception 
     * @throws  
     */
    public static void main(String[] args) throws  Exception {
        Server server = new RPC.Builder(new Configuration())        
        .setProtocol(MyBizable.class)
        .setInstance(new RPCServer())
        .setBindAddress("192.168.8.100")
        .setPort(8077)
        .build();
        server.start();
    }

}

Hadoop之RPC簡單使用(遠程過程調用協議)

  客戶端RPCClient:

  

Hadoop之RPC簡單使用(遠程過程調用協議)

package cn.jon.hadoop.rpc;import java.net.InetSocketAddress;import org.apache.hadoop.conf.Configuration;import org.apache.hadoop.ipc.RPC;public class RPCClient {    /**
     * @param args
     * @throws Exception 
     */
    public static void main(String[] args) throws Exception {        // TODO Auto-generated method stub
        MyBizable proxy = RPC.getProxy(MyBizable.class, 123456,new InetSocketAddress("192.168.8.100", 8077) , new Configuration());
        String result = proxy.doSomething("服務端");
        System.out.println(result);
        RPC.stopProxy(proxy);
    }

}

Hadoop之RPC簡單使用(遠程過程調用協議)

  樓主使用Linux作為客戶端,Windows作為服務端,我們先把寫好的程序打成jar,上傳到Linux:

  Hadoop之RPC簡單使用(遠程過程調用協議)

  然后,我們在windows端啟動RPCServer:

  Hadoop之RPC簡單使用(遠程過程調用協議)

  服務端啟動好后,我們在Linux中執行RPCClient.jar:  

java -jar RPCClient.jar

  執行結果可以看到輸出了“服務端”(樓主Linux時間沒有調準確):

Hadoop之RPC簡單使用(遠程過程調用協議)

    


向AI問一下細節
推薦閱讀:
  1. RPC是什么?
  2. Hadoop的RPC

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

云和县| 松桃| 平泉县| 东宁县| 云梦县| 江口县| 西青区| 旅游| 久治县| 县级市| 翁牛特旗| 高碑店市| 大荔县| 南部县| 瑞安市| 芜湖县| 碌曲县| 九龙坡区| 油尖旺区| 环江| 平乡县| 丰城市| 芦溪县| 濮阳县| 安义县| 晋中市| 浑源县| 大足县| 禹州市| 岳西县| 临安市| 宝坻区| 京山县| 扎兰屯市| 晋宁县| 九江县| 图木舒克市| 登封市| 洪洞县| 沁阳市| 特克斯县|