Hadoop-rpc调用案例,服务端,客户端代码案例
1. Hadoop-rpc框架
在hadoop中提供了一個rpc框架,通過這個rpc框架可以編寫一個rpc服務端程序,然后發布出去供客戶端調用。
1.1.服務端代碼
其中服務端(example-hadoop-rpc-server),其中代碼結果如下:
代碼說明:
ClientNamenodeProtocal | 接口定義 |
NameNode | 接口的實現 |
ServerPublisher | 用于發布服務的類 |
?
??? 若寫服務端代碼,需要一個服務端的接口,其中接口如下:
package cn.toto.rpc.protocal; ? public interface ClientNamenodeProtocal { ? ?? //為了保證客戶端和服務端的版本是一致的,如果沒有定義將報錯 ?? public static final long versionID = 1L; ????? ?? public String getMetaData(String path); ?? } |
接口的實現類是:
package cn.toto.rpc.server; ? import cn.toto.rpc.protocal.ClientNamenodeProtocal; ? public class NameNode implements ClientNamenodeProtocal { ? ?? @Override ?? public String getMetaData(String path) { ????? return path + " 2 {BLK1,BLK2} {BLK1:min1,mini2} {BLK2:mini4,mini5}"; ?? } ? } |
??? 用于發布的接口類:
package cn.toto.rpc.server; ? import java.io.IOException; ? 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 cn.toto.rpc.protocal.ClientNamenodeProtocal; ? public class ServerPublisher { ? ?? public static void main(String[] args) throws Exception, IOException { ????? ????? Builder builder = new RPC.Builder(new Configuration()); ????? ????? //暴露的僅僅是ClientNamenodeProtocal.class中的new NameNode()實現的方法 ????? builder.setBindAddress("localhost").setPort(8787) ????? ?????? .setProtocol(ClientNamenodeProtocal.class) ????? ?????? .setInstance(new NameNode()); ????? ????? //構建一個Server,并且啟動一下 ????? Server server = builder.build(); ????? server.start(); ?? } } |
?
1.2.客戶端
寫完客戶端后,可以開始寫客戶端調用進行測試了。
??? 客戶端的代碼如下:
?? 代碼說明:
ClientNamenodeProtocal | 和服務端一樣的接口 |
HdfsClient | 用于調用的客戶端代碼 |
?
?? 接口代碼如下:
package cn.toto.rpc.protocal; ? public interface ClientNamenodeProtocal { ? ?? //為了保證客戶端和服務端的版本是一致的,如果沒有定義將報錯 ?? public static final long versionID = 1L; ????? ?? public String getMetaData(String path); ?? } |
?
?? 客戶端代碼:
package cn.toto.rpc.client; ? import java.io.IOException; import java.net.InetSocketAddress; ? import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.ipc.RPC; ? import cn.toto.rpc.protocal.ClientNamenodeProtocal; ? public class HdfsClient { ??? ?? /** ?? ?* 在使用這個之前,需要先啟動服務端 ?? ?*/ ?? public static void main(String[] args) throws IOException { ????? //通過這種方式獲取到一個遠程調用對象 ????? ClientNamenodeProtocal nameNode = RPC.getProxy(ClientNamenodeProtocal.class, ??????????? ???? 1L, ??????????? ???? new InetSocketAddress("localhost",8787), ??????????? ???? new Configuration()); ????? ????? //調用服務端的接口,看看返回的結果 ????? String metaData = nameNode.getMetaData("/a.doc"); ????? System.out.println(metaData); ?? } } |
?
輸出的結果:
?
總結
以上是生活随笔為你收集整理的Hadoop-rpc调用案例,服务端,客户端代码案例的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 骁龙870对比骁龙888哪个好 高负载下
- 下一篇: 模拟MapReduce编程的程序案例(用