日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Hadoop 中RPC使用

發(fā)布時間:2024/4/14 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Hadoop 中RPC使用 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

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

package hadoop.rpctest; /** 接口定義網(wǎng)絡(luò)通信雙方共同遵循的約定或協(xié)議*/ public interface DemoNamenodeProtocol {//定義通信上方一致的版本號public static final long versionID = 1L; //定義通信雙方可以調(diào)用的方法public String getMetaData(String filePath); }

--------------------------------------------------------------end

---------------------------------------------------------------------start
服務(wù)器端 實現(xiàn)類:DemoNamenodeImpl

package hadoop.rpctest; public class DemoNamenodeImpl implements DemoNamenodeProtocol{public String getMetaData(String filePath) {return filePath + "-----我給你開玩笑呢" ;} }

--------------------------------------------------------------end

---------------------------------------------------------------------start
服務(wù)發(fā)布類:ServerPublisher

package hadoop.rpctest; 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; //用于把我們定義的業(yè)務(wù)功能發(fā)布為rpc服務(wù) public class ServerPublisher {public static void main(String[] args) throws HadoopIllegalArgumentException, IOException {// TODO Auto-generated method stub//獲取一個創(chuàng)建rpc服務(wù)的builderBuilder builder = new RPC.Builder(new Configuration());//通過Builder與我名定義的業(yè)務(wù)功能建立關(guān)系//設(shè)置服務(wù)端服務(wù)實例實現(xiàn)的接口--及通信雙方功能遵循的協(xié)議builder.setProtocol(DemoNamenodeProtocol.class);//設(shè)置提供業(yè)務(wù)服務(wù)的具體實例對象builder.setInstance(new DemoNamenodeImpl());//設(shè)置服務(wù)進程所綁定的地址信息builder.setBindAddress("hadoop02");//設(shè)置服務(wù)進程的端口builder.setPort(10000);//用builder來創(chuàng)建一個服務(wù) (socket服務(wù))Server server = builder.build();//啟動服務(wù),這樣就可以被客戶端調(diào)用了server.start();} }

--------------------------------------------------------------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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。