模擬hadoop-rpc通訊
阿新 • • 發佈:2018-11-10
一、RPC服務類
package com.css.rpc.server; import java.io.IOException; import org.apache.hadoop.HadoopIllegalArgumentException; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.ipc.RPC; import org.apache.hadoop.ipc.RPC.Builder; import org.apache.hadoop.ipc.RPC.Server; import com.css.rpc.protocol.ClientNamenodeProtocol; /** * RPC服務類 */ public class PublishServer { public static void main(String[] args) throws HadoopIllegalArgumentException, IOException { // 1.構建RPC框架 Builder builder = new RPC.Builder(new Configuration()); // 2.繫結地址 builder.setBindAddress("localhost"); // 3.繫結埠號 builder.setPort(7777); // 4.繫結協議 builder.setProtocol(ClientNamenodeProtocol.class); // 5.呼叫協議的實現類 builder.setInstance(new MyNameNode()); // 6.建立服務 Server server = builder.build(); server.start(); } }
二、自定義遵循的協議類
package com.css.rpc.protocol;
/**
* 自定義遵循的協議類
*/
public interface ClientNamenodeProtocol {
// 1.定義協議的id
public static final long versionID = 1L;
// 2.定義方法(拿到元資料的方式)
public String getMetaData(String path);
}
三、自定義協議的實現類
package com.css.rpc.server; import com.css.rpc.protocol.ClientNamenodeProtocol; /** * 自定義協議的實現類 */ public class MyNameNode implements ClientNamenodeProtocol{ @Override public String getMetaData(String path) { return path + ": 3 - {BLK_1,BLK_2,BLK_3...}"; } }
四、獲取元資料資訊(客戶端)
package com.css.rpc.client; import java.io.IOException; import java.net.InetSocketAddress; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.ipc.RPC; import com.css.rpc.protocol.ClientNamenodeProtocol; /** * 獲取元資料資訊 */ public class GetHDFS { public static void main(String[] args) throws IOException { // 1.拿到協議 ClientNamenodeProtocol proxy = RPC.getProxy(ClientNamenodeProtocol.class, 1L, new InetSocketAddress("localhost", 7777), new Configuration()); // 2.傳送請求 String metaData = proxy.getMetaData("/hello"); // 3.拿到元資料資訊 System.out.println(metaData); } }