Hadoop-rpc调用案例,服务端,客户端代码案例
1. Hadoop-rpc框架
在hadoop中提供了一個(gè)rpc框架,通過這個(gè)rpc框架可以編寫一個(gè)rpc服務(wù)端程序,然后發(fā)布出去供客戶端調(diào)用。
1.1.服務(wù)端代碼
其中服務(wù)端(example-hadoop-rpc-server),其中代碼結(jié)果如下:
代碼說明:
ClientNamenodeProtocal | 接口定義 |
NameNode | 接口的實(shí)現(xiàn) |
ServerPublisher | 用于發(fā)布服務(wù)的類 |
?
??? 若寫服務(wù)端代碼,需要一個(gè)服務(wù)端的接口,其中接口如下:
package cn.toto.rpc.protocal; ? public interface ClientNamenodeProtocal { ? ?? //為了保證客戶端和服務(wù)端的版本是一致的,如果沒有定義將報(bào)錯(cuò) ?? public static final long versionID = 1L; ????? ?? public String getMetaData(String path); ?? } |
接口的實(shí)現(xiàn)類是:
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}"; ?? } ? } |
??? 用于發(fā)布的接口類:
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()實(shí)現(xiàn)的方法 ????? builder.setBindAddress("localhost").setPort(8787) ????? ?????? .setProtocol(ClientNamenodeProtocal.class) ????? ?????? .setInstance(new NameNode()); ????? ????? //構(gòu)建一個(gè)Server,并且啟動(dòng)一下 ????? Server server = builder.build(); ????? server.start(); ?? } } |
?
1.2.客戶端
寫完客戶端后,可以開始寫客戶端調(diào)用進(jìn)行測(cè)試了。
??? 客戶端的代碼如下:
?? 代碼說明:
ClientNamenodeProtocal | 和服務(wù)端一樣的接口 |
HdfsClient | 用于調(diào)用的客戶端代碼 |
?
?? 接口代碼如下:
package cn.toto.rpc.protocal; ? public interface ClientNamenodeProtocal { ? ?? //為了保證客戶端和服務(wù)端的版本是一致的,如果沒有定義將報(bào)錯(cuò) ?? 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 { ??? ?? /** ?? ?* 在使用這個(gè)之前,需要先啟動(dòng)服務(wù)端 ?? ?*/ ?? public static void main(String[] args) throws IOException { ????? //通過這種方式獲取到一個(gè)遠(yuǎn)程調(diào)用對(duì)象 ????? ClientNamenodeProtocal nameNode = RPC.getProxy(ClientNamenodeProtocal.class, ??????????? ???? 1L, ??????????? ???? new InetSocketAddress("localhost",8787), ??????????? ???? new Configuration()); ????? ????? //調(diào)用服務(wù)端的接口,看看返回的結(jié)果 ????? String metaData = nameNode.getMetaData("/a.doc"); ????? System.out.println(metaData); ?? } } |
?
輸出的結(jié)果:
?
總結(jié)
以上是生活随笔為你收集整理的Hadoop-rpc调用案例,服务端,客户端代码案例的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 骁龙870对比骁龙888哪个好 高负载下
- 下一篇: 顶分型什么意思