Hadoop 中RPC使用
2019獨角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>
導(dǎo)入包:
理解:rpc是一種“遠程過程調(diào)用協(xié)議”
RPC采用客戶機/服務(wù)器模式。請求程序就是一個客戶機,而服務(wù)提供程序就是一個服務(wù)器。首先,客戶機調(diào)用進程發(fā)送一個有進程參數(shù)的調(diào)用信息到服務(wù)進程,然后等待應(yīng)答信息。在服務(wù)器端,進程保持睡眠狀態(tài)直到調(diào)用信息到達為止。當(dāng)一個調(diào)用信息到達,服務(wù)器獲得進程參數(shù),計算結(jié)果,發(fā)送答復(fù)信息,然后等待下一個調(diào)用信息,最后,客戶端調(diào)用進程接收答復(fù)信息,獲得進程結(jié)果,然后調(diào)用執(zhí)行繼續(xù)進行。
?
具體使用:方面可以理解為,例如一個公司的后臺數(shù)據(jù)支持此公司多個平臺的使用,如果每個平臺都寫一套調(diào)用邏輯,如果后臺邏輯做調(diào)整則每個平臺都需要涉及;如果把各個平臺訪問后端的操作提前出來,放在服務(wù)端,來提供服務(wù),則各個平臺都可以使用;并且對平臺開發(fā)也隱藏了后端。
開發(fā)注意:
rpc服務(wù)端和rpc客戶端的通信協(xié)議接口。服務(wù)端和客戶端都必須有,且路徑一致
實例如下:
一:建兩個項目:
客戶端項目:democlient
服務(wù)器端項目:demonamenode
在服務(wù)器端和客戶端開發(fā)都需要建相同的接口:網(wǎng)絡(luò)通信雙方都要遵循的協(xié)議
1>開發(fā)路徑一致;--hadoop.rpctest
2>名稱一致。 ? ? ? --DemoNamenodeProtocol.java
服務(wù)器端需要一個協(xié)議的實現(xiàn)類:例如DemoNamenodeImpl.java;
服務(wù)器端還需要把協(xié)議的實現(xiàn)發(fā)布到RPC服務(wù)上
這里測試實現(xiàn):ServerPublisher.java
二:服務(wù)端項目實現(xiàn)后,需要 打包 ?Runnable JAR,并上傳到服務(wù)器上,
發(fā)布: ?java -jar ? ***.jar
?
三:服務(wù)器端發(fā)布后,則客戶端可以調(diào)用此服務(wù)。
?
代碼實現(xiàn)附上:
---------------------------------------------------------------------start
自定義協(xié)議接口:DemoNamenodeProtocol
--------------------------------------------------------------end
---------------------------------------------------------------------start
服務(wù)器端 實現(xiàn)類:DemoNamenodeImpl
--------------------------------------------------------------end
---------------------------------------------------------------------start
服務(wù)發(fā)布類:ServerPublisher
--------------------------------------------------------------end
客戶端訪問測試:DemoClient
package clienttest; import java.io.IOException; import java.net.InetSocketAddress; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.ipc.RPC; import hadoop.rpctest.DemoNamenodeProtocol; public class DemoClient { public static void main(String[] args) throws IOException {//客戶端訪問rpc服務(wù)器代碼實現(xiàn)InetSocketAddress addr = new InetSocketAddress("hadoop02",10000);DemoNamenodeProtocol demoNamenodeImpl = RPC.getProxy(DemoNamenodeProtocol.class, 1L, addr, new Configuration());String MetaData = demoNamenodeImpl.getMetaData("獲取RPC服務(wù):hello world");System.out.println(MetaData); } }?
轉(zhuǎn)載于:https://my.oschina.net/u/3420885/blog/1634814
總結(jié)
以上是生活随笔為你收集整理的Hadoop 中RPC使用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: input限制输入小数点后两位(vue版
- 下一篇: Sql 最简单的Sqlserver连接