溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

再看hadoop RPC

發(fā)布時(shí)間:2020-06-16 10:32:04 來(lái)源:網(wǎng)絡(luò) 閱讀:589 作者:kencao123121212 欄目:大數(shù)據(jù)

再看hadoop PRC

以前寫過(guò)一篇文章叫做《hadoop RPC從入門到暫時(shí)放棄》,現(xiàn)在粗略的把《Hadoop 2.xHDFS源碼剖析》看完了第一遍,感覺(jué)對(duì)HDFS的整體了解上升了一個(gè)層次,并且重新看了一下動(dòng)態(tài)代理、protocol buffer所以這次重新來(lái)寫寫對(duì)于hadoop RPC的認(rèn)識(shí)。

下面還是主要通過(guò)ClientProtocol協(xié)議,即hdfs客戶端與NameNode通信的協(xié)議,來(lái)介紹一下對(duì)hadoopRPC的認(rèn)識(shí)。

  1. 客戶端

首先編寫程序操作hadoop hdfs的時(shí)候,通常都是會(huì)用到DFSClient這個(gè)類的,這里的DFSClient類中,持有一個(gè)實(shí)現(xiàn)了ClientProtocol接口的ClientNameNodeProtocolTranslatorPB(以下簡(jiǎn)稱translator)的對(duì)象實(shí)例,這個(gè)實(shí)例主要的功能就是將ClientProtocol轉(zhuǎn)化為protocol buffer方式序列化的請(qǐng)求,其實(shí)主要也是在這其中使用動(dòng)態(tài)代理獲取了ClientNamenodeProtocolPB的代理對(duì)象來(lái)實(shí)現(xiàn)轉(zhuǎn)換。其中獲取translator的時(shí)候還需要考慮NameNode是否是HA模式的。

其次Client部分最主要的方法就是Client.call方法,在調(diào)用call方法時(shí)會(huì)需要獲取相應(yīng)RPCServer 的連接對(duì)象(Connection),但是由于建立連接在任何一個(gè)系統(tǒng)中都是一個(gè)十分耗時(shí)的操作,所以connection會(huì)緩存到相應(yīng)服務(wù)器的連接。Connection對(duì)象除了負(fù)責(zé)建立連接之外,還會(huì)在獲取相應(yīng)請(qǐng)求對(duì)應(yīng)的應(yīng)答后喚起相應(yīng)請(qǐng)求的線程。PRC請(qǐng)求除了包括經(jīng)過(guò)protocol buffer序列化的參數(shù),還有對(duì)應(yīng)的請(qǐng)求協(xié)議的標(biāo)識(shí)字段。當(dāng)接收到請(qǐng)求相應(yīng)的應(yīng)答時(shí),會(huì)根據(jù)callId喚起等待的線程,這里根據(jù)RPC調(diào)用是否成功需要考慮是調(diào)用正常的接受應(yīng)答方法還是異常的應(yīng)答方法。

 

 2.服務(wù)器

NameNodeRPC服務(wù)器為例,它有一個(gè)名為NameNodeRpcServer的類專門負(fù)責(zé)從客戶端、DataNode、以及其他NameNode發(fā)送過(guò)來(lái)的PRC請(qǐng)求。由于需要處理多種PRC協(xié)議(例如從客戶端發(fā)來(lái)的ClientNameNodeProtocolPB),所以在這個(gè)類中需要一個(gè)叫做BlockingService的類,根據(jù)發(fā)送的請(qǐng)求中關(guān)于調(diào)用協(xié)議的信息,找出相應(yīng)得serverSideTranslator來(lái)處理相應(yīng)的*PB協(xié)議轉(zhuǎn)化為真正的協(xié)議,例如通過(guò)clientNNPbService這個(gè)BlockingService將從客戶端發(fā)來(lái)的ClientNamenodeProtocolPB協(xié)議,利用clientProtocolServerTranslator轉(zhuǎn)化為jvm能夠識(shí)別的ClientProtocol協(xié)議。

除此之外,RPC服務(wù)端還參考了reactor設(shè)計(jì)模型,采用線程池以及nio的思想,提高了并發(fā)能力,具體細(xì)節(jié)可以參考以前寫得《hadoop RPC從入門到暫時(shí)放棄》。

 

         以上差不多就是對(duì)hadoopRPC的全部認(rèn)識(shí)了,以后有新的了解在及時(shí)更新。

                                                                                                                         肯草在深圳

                                                                                                                         2017-03-12


向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI