通信協議 遠程調用RPC

1.通訊協議
所有的HDFS通訊協議都是建立在TCP/IP協議之上。
客戶端通過一個可配置的TCP端口連接到Namenode,通過ClientProtocol協議與Namenode交
互。而Datanode使用DatanodeProtocol協議與Namenode交互。
一個遠程過程調用(RPC)模型被抽象出來封裝ClientProtocol和Datanodeprotocol協議。在
設計上,Namenode不會主動發起RPC,而是響應來自客戶端或 Datanode 的RPC請求。
編寫RPC
package com.nefu.rpc;public interface RPCprotocol {long versionID = 666;void mkdirs(String path);
}

這段代碼定義了一個 Java 接口(interface)叫做 RPCprotocol,它主要用于描述一個遠程過程調用(RPC)的協議。讓我們逐行解釋:

1.接口定義:


2.RPCprotocol 是一個接口,接口在 Java 中是一種規范,用于描述一組方法的集合,而不提供這些方法的具體實現。其他類可以實現這個接口,并提供方法的具體實現。


3.常量 versionID:


4.versionID 是一個接口中的常量,其值為 666。這個常量被用于標識協議的版本號。在某些情況下,這樣的版本號可以用來確保通信的雙方使用相同或兼容的協議版本。


5.抽象方法 mkdirs:


6.接口定義了一個抽象方法 mkdirs,該方法沒有具體的實現。這個方法的目的是用于創建目錄,接受一個字符串類型的參數 path,表示要創建的目錄路徑。

綜合起來,這個接口定義了一個協議,規定了遠程調用的版本號以及遠程調用的方法。實際的使用場景需要有一個實現了這個接口的類,該類提供了 mkdirs 方法的具體實現。其他系統的組件可以通過這個接口調用 mkdirs 方法,實現在遠程系統上創建目錄的功能。例如,可以有一個服務器實現這個接口,并在客戶端通過遠程調用執行相應的操作。

package com.nefu.rpc;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.ipc.RPC;
import org.apache.hadoop.ipc.Server;import java.io.IOException;public class NamenodeServer implements RPCprotocol{public void mkdirs(String path){System.out.println("在服務端,創建路徑" + path);}public static void main(String[] args) throws IOException{Server server = new RPC.Builder(new Configuration()) .setBindAddress("localhost") .setPort(9999) .setProtocol(RPCprotocol.class) .setInstance(new NamenodeServer()) .build();System.out.println("服務器開始工作 "); server.start(); }}

這段代碼實現了一個簡單的Hadoop RPC服務。讓我們逐行解釋:

1.導包語句:


2.import org.apache.hadoop.conf.Configuration;:導入Hadoop配置相關的類。
3.import org.apache.hadoop.ipc.RPC;:導入Hadoop IPC(Inter-Process Communication)相關的類。
4.import org.apache.hadoop.ipc.Server;:導入Hadoop IPC中的服務器類。
5.import java.io.IOException;:導入處理輸入輸出異常的類。


6.類定義:


7.public class NamenodeServer implements RPCprotocol:定義了一個名為 NamenodeServer 的類,該類實現了之前提到的 RPCprotocol 接口。


8.mkdirs 方法實現:


9.public void mkdirs(String path):實現了 RPCprotocol 接口中的 mkdirs 方法。在這個具體的實現中,它簡單地在服務器端打印一條消息,指示在服務端創建了指定路徑的目錄。


10.main 方法:


11.public static void main(String[] args) throws IOException:主方法,是程序的入口點。
12.Server server = new RPC.Builder(new Configuration())...:創建了一個 Server 實例,通過 RPC.Builder 構建。指定了服務器的配置、綁定地址(localhost)、端口號(9999)、使用的協議(RPCprotocol.class),以及服務器實例(NamenodeServer 的一個實例)。
13.System.out.println("服務器開始工作 ");:打印一條消息,指示服務器開始工作。
14.server.start();:啟動服務器,開始監聽指定的端口,等待客戶端的遠程調用請求。

綜合起來,這段代碼實現了一個簡單的Hadoop RPC服務器,該服務器監聽在本地地址(localhost)的9999端口上,并實現了RPCprotocol接口中的mkdirs方法。當客戶端通過RPC調用mkdirs方法時,服務器會在控制臺上打印一條消息,指示在服務端創建了指定路徑的目錄。

package com.nefu.rpc;import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.ipc.RPC;import java.io.IOException;
import java.net.InetSocketAddress;public class HdfsClient {public static void main(String[] args) throws IOException {RPCprotocol client = RPC.getProxy(RPCprotocol.class, RPCprotocol.versionID, new InetSocketAddress("localhost", 9999), new Configuration());System.out.println("我是客戶端");client.mkdirs("/input");}
}

這段代碼實現了一個簡單的Hadoop RPC客戶端。讓我們逐行解釋:

1.導包語句:


2.import org.apache.hadoop.conf.Configuration;:導入Hadoop配置相關的類。
3.import org.apache.hadoop.ipc.RPC;:導入Hadoop IPC(Inter-Process Communication)相關的類。
4.import java.io.IOException;:導入處理輸入輸出異常的類。
5.import java.net.InetSocketAddress;:導入處理網絡地址的類。


6.類定義:


7.public class HdfsClient:定義了一個名為 HdfsClient 的類。


8.main 方法實現:


9.public static void main(String[] args) throws IOException:主方法,是程序的入口點。
10.RPCprotocol client = RPC.getProxy(RPCprotocol.class, RPCprotocol.versionID, new InetSocketAddress("localhost", 9999), new Configuration());:通過 RPC.getProxy 方法創建了一個代理對象 client,該對象實現了 RPCprotocol 接口。這個代理對象將用于向服務器發起RPC調用。
11.System.out.println("我是客戶端");:打印一條消息,指示這是客戶端的輸出。
12.client.mkdirs("/input");:通過代理對象調用遠程服務器的 mkdirs 方法,傳遞了一個路徑參數 "/input"。

綜合起來,這段代碼實現了一個Hadoop RPC客戶端,該客戶端連接到在本地地址(localhost)的9999端口上運行的RPC服務器,并通過RPC調用向服務器發送了一個 mkdirs 請求,創建了名為 "/input" 的目錄。客戶端在控制臺上輸出了一條消息,指示它是客戶端。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/208588.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/208588.shtml
英文地址,請注明出處:http://en.pswp.cn/news/208588.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

微信小程序引入vant-weapp爬出坑

最新的微信小程序的項目結構跟之前的不一樣,然后,按照vant-weapp上的官方文檔,安裝步驟失敗,提示了各種錯誤。如果你的微信小程序結構跟我的一致,可以采用和我一樣的方案。 微信小程序引入vant-weapp爬出坑 移動pack…

深入淺出:HTTPS單向與雙向認證及證書解析20231208

介紹: 網絡安全的核心之一是了解和實施HTTPS認證。本文將探討HTTPS單向認證和雙向認證的區別,以及SSL證書和CA證書在這些過程中的作用,并通過Nginx配置實例具體說明。 第一部分:HTTPS單向認證 定義及工作原理:HTTPS單向認證是一…

ELK架構監控MySQL慢日志

目錄 一、架構概述 二、安裝部署 三、Filebeat配置 四、Logstash配置 一、架構概述 本文使用將使用filebeat收集mysql日志信息,發送到redis中緩存,由logstash從redis中取出,發送es中存儲,再從kibana中展示。 二、安裝部署 ELK…

做數據分析為何要學統計學(5)——什么問題適合使用t檢驗?

t檢驗&#xff08;Students t test&#xff09;&#xff0c;主要依靠總體正態分布的小樣本&#xff08;例如n < 30&#xff09;對總體均值水平進行差異性判斷。 t檢驗要求樣本不能超過兩組&#xff0c;且每組樣本總體服從正態分布&#xff08;對于三組以上樣本的&#xff0…

同一個kmz數據同樣的底圖在QGIS上顯示位置正常, 在Mars3d中顯示就偏移了一些

問題&#xff1a; 1.同一個kmz數據同樣的底圖在QGIS上顯示位置正常, 在網頁中顯示就偏移了一些 在qgis上的顯示效果&#xff0c;和在mars3d的顯示效果&#xff1a;數據明顯存在偏移。 解決步驟&#xff1a; 1.查看了kmz數據&#xff0c;里面實際是tif圖片數據&#xff0c;估…

MES管理系統在非標制造企業中的應用

在當今制造業中&#xff0c;非標制造企業逐漸成為一種重要的存在。與傳統的批量生產制造企業不同&#xff0c;非標制造企業主要特點是能夠根據客戶需求進行定制化生產。這種定制化的生產模式對企業的管理提出了更高的要求&#xff0c;同時也帶來了更多的挑戰。在非標制造企業中…

mac蘋果電腦清除數據軟件CleanMyMac X4.16

在數字時代&#xff0c;保護個人隱私變得越來越重要。當我們出售個人使用的電腦&#xff0c;亦或者離職后需要上交電腦&#xff0c;都需要對存留在電腦的個人信息做徹底的清除。隨著越來越多的人選擇使用蘋果電腦&#xff0c;很多人想要了解蘋果電腦清除數據要怎樣做才是最徹底…

ELK(三)—安裝可視化工具

目錄復制 目錄 一、ElasticSearch-Head可視化工具介紹1.1特性&#xff1a;1.2用法&#xff1a; 二、安裝2.1docker安裝2.2Chrome插件安裝 一、ElasticSearch-Head可視化工具介紹 ElasticSearch-Head 是一個基于瀏覽器的 Elasticsearch 可視化工具&#xff0c;它提供了一個直觀…

【GAMES101】觀測變換

圖形學不等于 OpenGL&#xff0c;不等于光線追蹤&#xff0c;而是一套生成整個虛擬世界的方法 記得有個概念叫光柵化&#xff0c;就是把三維虛擬世界的事物顯示在二維的屏幕上&#xff0c;這里就涉及到觀察變換 觀察變換&#xff0c;叫viewing transformation&#xff0c;包括…

1、關于前端js-ajax繞過

1、Ajax知識 、js--Ajax 傳統請求跟js--Ajax請求的差別 在實例中用的上js-ajax的有 表單驗證&#xff1a; 在用戶填寫表單時&#xff0c;可以使用 Ajax 在不刷新頁面的情況下驗證表單字段&#xff0c;并提供即時反饋。 實時搜索&#xff1a; 在搜索框中輸入內容時&#xff0…

Gateway

網關的作用&#xff1a; 可以對訪問的用戶進行身份認證和權限校驗還可以服務路由&#xff0c;負載均衡還可以進行請求限流 網關本身也是微服務的一部分&#xff0c;所以需要使用nacos進行服務注冊和發現 網關路由的配置 路由id&#xff1a;路由唯一標識uri&#xff1a;路由…

使用STM32 HAL庫進行GPIO控制的實例

?作者簡介&#xff1a;熱愛科研的嵌入式開發者&#xff0c;修心和技術同步精進&#xff0c; 代碼獲取、問題探討及文章轉載可私信。 ? 愿你的生命中有夠多的云翳,來造就一個美麗的黃昏。 &#x1f34e;獲取更多嵌入式資料可點擊鏈接進群領取&#xff0c;謝謝支持&#xff01;…

獨立服務器的主要應用方向有什么_Maizyun

獨立服務器的主要應用方向有什么&#xff1f; 獨立服務器是指托管單一應用程序或網站的單臺服務器。隨著互聯網的發展&#xff0c;獨立服務器已經成為許多企業和個人用戶的重要選擇&#xff0c;因為它提供了更高的靈活性和控制權。本文將探討獨立服務器的主要應用方向。 一、…

利用R語言heatmap.2函數進行聚類并畫熱圖

數據聚類然后展示聚類熱圖是生物信息中組學數據分析的常用方法&#xff0c;在R語言中有很多函數可以實現&#xff0c;譬如heatmap,kmeans等&#xff0c;除此外還有一個用得比較多的就是heatmap.2。最近在網上看到一個筆記文章關于《一步一步學heatmap.2函數》&#xff0c;在此與…

計算機存儲結構分析(寄存器,內存,緩存,硬盤)

https://blog.csdn.net/bemodesty/article/details/81476906 前言 一個計算機包含多種存儲器比如&#xff1a;寄存器、高速緩存、內存、硬盤、光盤等&#xff0c;為啥有這么多種存儲方式&#xff0c;對于不太了解的人&#xff0c;總是覺得云里霧里的&#xff0c;搞不明白原因…

java-兩個列表進行比較,判斷那些是需要新增的、刪除的、和更新的

文章目錄 前言兩個列表進行比較&#xff0c;判斷那些是需要新增的、刪除的、和更新的 前言 如果您覺得有用的話&#xff0c;記得給博主點個贊&#xff0c;評論&#xff0c;收藏一鍵三連啊&#xff0c;寫作不易啊^ _ ^。 ??而且聽說點贊的人每天的運氣都不會太差&#xff0c;實…

SpringIOC之@Configuration

博主介紹&#xff1a;?全網粉絲5W&#xff0c;全棧開發工程師&#xff0c;從事多年軟件開發&#xff0c;在大廠呆過。持有軟件中級、六級等證書。可提供微服務項目搭建與畢業項目實戰&#xff0c;博主也曾寫過優秀論文&#xff0c;查重率極低&#xff0c;在這方面有豐富的經驗…

Django的logging-日志模塊的簡單使用方法

擴展閱讀&#xff1a; Python-Django的“日志功能-日志模塊(logging模塊)-日志輸出”的功能詳解 現在有下面的Python代碼&#xff1a; # -*- coding: utf-8 -*-def log_out_test(content_out):print(content_out)content1 "i love you01" log_out_test(content1)現…

云服務器Centos中安裝Docker

云服務器Centos中安裝Docker 1 簡介DockerCentosCentos和Ubuntu區別 2 安裝3 測試hello-world的鏡像測試 1 簡介 Docker Docker是一個開源的應用容器引擎&#xff0c;利用操作系統本身已有的機制和特性&#xff0c;可以實現遠超傳統虛擬機的輕量級虛擬化。它支持將軟件編譯成…

Hive 淺析

Hive是一個簡單的LUA沙盒&#xff0c;除了基本的LUA解釋器的功能以外&#xff0c;還提供了諸如熱加載等功能。 了解HIVE的工作原理有利于了解Lua虛擬機的底層實現機理。 本文從是什么-怎么用-為什么三個維度介紹HIVE。 Hive Hive是什么 hive是一個簡單的LUA應用框架,目前基于…