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" 的目錄。客戶端在控制臺上輸出了一條消息,指示它是客戶端。