您好,登錄后才能下訂單哦!
這篇文章主要講解了“Hadoop RPC反射機制怎么理解”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“Hadoop RPC反射機制怎么理解”吧!
有了Client 和Server,很自然就能RPC 啦。下面輪到RPC.java 啦。
一般來說,分布式對象一般都會要求根據(jù)接口生成存根和框架。如CORBA,可以通過IDL,生成存根和框架。但是,在
org.apache.hadoop.rpc,我們就不需要這樣的步驟了。上類圖。
為了分析Invoker,我們需要介紹一些Java 反射實現(xiàn)Dynamic Proxy 的背景。
Dynamic Proxy 是由兩個class 實現(xiàn)的:java.lang.reflect.Proxy 和java.lang.reflect.InvocationHandler,后者是一個
接口。所謂Dynamic Proxy 是這樣一種class:它是在運行時生成的class,在生成它時你必須提供一組interface 給它,然后
該class 就宣稱它實現(xiàn)了這些interface。
這個Dynamic Proxy 其實就是一個典型的Proxy 模式,它不會替你作實質(zhì)性的工作,在生成它的實例時你必須提供一個handler,
由它接管實際的工作。這個handler,在Hadoop 的RPC 中,就是Invoker 對象。
我們可以簡單地理解:就是你可以通過一個接口來生成一個類,這個類上的所有方法調(diào)用,都會傳遞到你生成類時傳遞的
InvocationHandler 實現(xiàn)中。
在Hadoop 的RPC 中,Invoker 實現(xiàn)了InvocationHandler 的invoke 方法(invoke 方法也是InvocationHandler 的唯一方法)。
Invoker 會把所有跟這次調(diào)用相關(guān)的調(diào)用方法名,參數(shù)類型列表,參數(shù)列表打包,然后利用前面我們分析過的Client,通過socket
傳遞到服務(wù)器端。就是說,你在proxy 類上的任何調(diào)用,都通過Client 發(fā)送到遠方的服務(wù)器上。
Invoker 使用Invocation。Invocation 封裝了一個遠程調(diào)用的所有相關(guān)信息,它的主要屬性有: methodName,調(diào)用方法名,
parameterClasses,調(diào)用方法參數(shù)的類型列表和parameters,調(diào)用方法參數(shù)。注意,它實現(xiàn)了Writable 接口,可以串行化。
RPC.Server 實現(xiàn)了org.apache.hadoop.ipc.Server,你可以把一個對象,通過RPC,升級成為一個服務(wù)器。服務(wù)器接收到的請求(通過Invocation),
解串行化以后,就變成了方法名,方法參數(shù)列表和參數(shù)列表。利用Java 反射,我們就可以調(diào)用對應(yīng)的對象的方法。調(diào)用的結(jié)果再通過socket,返
回給客戶端,客戶端把結(jié)果解包后,就可以返回給Dynamic Proxy 的使用者了。
感謝各位的閱讀,以上就是“Hadoop RPC反射機制怎么理解”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對Hadoop RPC反射機制怎么理解這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關(guān)知識點的文章,歡迎關(guān)注!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。