導航:首頁 > 源碼編譯 > hadooprpc源碼分析

hadooprpc源碼分析

發布時間:2022-07-31 05:54:53

A. hadoop生態系統哪個組建源碼容易讀懂

從Hadoop 0.20版本開始,原來Hadoop項目的Core部分更名為Hadoop Common。
Common為Hadoop的其他項目提供了一些常用工具,主要包括系統配置工具Configuration、遠程過程調用RPC、序列化機制和Hadoop抽象文件系統FileSystem等。
它們為在通用硬體上搭建雲計算環境提供基本的服務,並為運行在該平台上的軟體開發提供了所需的API。

B. 如何利用hadoop RPC框架實現和NameNode的交互

在此之前,我們需要准備:
hadoop的源碼
protobuf 2.5版本
JDK
hadoop 2.x版本中採用了Protocol Buffer (簡稱protobuf)作為序列化和反序列化的工具,所以我們在修改源碼時需要按照相應規則編寫message來實現數據的傳輸。
什麼是protobuf?
protobuf是Google 公司內部的混合語言數據標准,它很適合做數據存儲或 RPC 數據交換格式。是一種可用於通訊協議、數據存儲等領域,並且和語言無關、平台無關、可擴展的序列化結構數據格式。 簡單說來 Protobuf 的主要優點就是:簡單,快。
安裝protobuf和編譯hadoop的過程網上的資料很多,我就直接跳過了,我們可以通過Idea導入hadoop的Maven項目,方便對源碼的修改
1. 修改proto文件,定義message和service
假設我們現在要實現的是一個檢查某個文件或文件夾許可權是否符合755,並對客戶端返回boolean值。 這是一個屬於Client和NameNode交互的一個方法,所以我們在Idea中ctrl+shift+N快速的找到ClientNamenodeProtocol.proto,添加對應的message(結構化數據被稱為message)
message CheckPermissionRequestProto {
required string src = 1;
}
message CheckPermissionResponseProto {
required bool checkPerm = 1;
}

我們在這個文件中會看到除了string、bool類型的前面會有三種消息成員的規則,他們的含義分別是:
required:這個域在消息中必須剛好有1個
optional:這個域在消息中可以有0或1個
repeated:這個域在消息中可以有從多個,包括0個
在文件中找到service,並添加方法checkPermission方法
service ClientNamenodeProtocol {
......
rpc checkPermission(CheckPermissionRequestProto) returns(CheckPermissionResponseProto);
}

接下來編譯,編譯之後你可以在ClientNamenodeProtocolProtos類(編譯後生成)的介面ClientNamenodeProtocol,看到新增加的方法了。
2. ClientNamenodeProtocolPB文件
這個介面是client用來和NameNode進行交互的,它繼承了ClientNamenodeProtocol介面,即新生成的介面也在其中,這里不用做修改
3. 類
這個類是將對ClientProtocol中方法的調用轉化為RPC調用Namenode的服務,並將調用參數轉化為PB的類型。 所以,我們需要在ClientProtocol增加checkPermission方法,並在這個類中進行Override
在ClientProtocol中增加
@Idempotent
public boolean checkPermission(String src)
throws AccessControlException, FileNotFoundException,
UnresolvedPathException, IOException;

在類中
@Override
public boolean checkPermission(String src) throws AccessControlException,
FileNotFoundException, UnresolvedPathException, IOException {
CheckPermissionRequestProto req = CheckPermissionRequestProto.newBuilder()
.setSrc(src).build();
try {
return rpcProxy.checkPermission(null,req).getCheckPerm();
} catch (ServiceException e) {
throw ProtobufHelper.getRemoteException(e);
}
}

注意:要把CheckPermissionRequestProto進行import,否則編譯你懂的。
相應的我們也需要在NameNodeRpcServer類中Override該方法,因為NamenodeProtocols繼承了ClientProtocol,這類負責處理所有到達NN的RPC call,他負責將請求轉化為NN的方法的調用,因此也可以看出它們的實現分層是很清晰的。
@Override // ClientProtocol
public boolean checkPermission(String src)
throws AccessControlException, FileNotFoundException, UnresolvedPathException, IOException {
return namesystem.checkPermission(src);
}

4. 類
該類是server端用來將生成的PB格式的數據轉化為本地調用的數據類型,所以增加改方法
@Override
public CheckPermissionResponseProto checkPermission(RpcController controller,
CheckPermissionRequestProto req)
throws ServiceException {
try {
boolean result = server.checkPermission(req.getSrc());
return CheckPermissionResponseProto.newBuilder().setCheckPerm(result).build(); //將結果返回
} catch (IOException e) {
throw new ServiceException(e);
}

}

這里的server就是NameNodeRpcServer,相當於調用NameNodeRpcServer的checkPermission方法,並在NameNodeRpcServer中調用FSNamesystem完成最後的邏輯
Namesystem類增加方法
boolean checkPermission(String src) throws IOException {
readLock();
try {
HdfsFileStatus fileStatus = getFileInfo(src,false); //這個方法我有做過修改,你們可能不一樣
FsPermission fsPermission = new FsPermission((short)0755);
if(fileStatus != null && fsPermission.equals(fileStatus.getPermission())) {
return true;
}
} finally {
readUnlock();
}
return false;
}

接下來我就舉個例子怎麼調用,這只是部分代碼,詳細的自己看看源碼吧。
proxyInfo = NameNodeProxies.createProxy(conf, nameNodeUri,
ClientProtocol.class, nnFallbackToSimpleAuth);
this.namenode = proxyInfo.getProxy();
namenode.checkPermission(src);

5. 最後一步就是編譯了
希望通過這個例子能夠加深對hadoop實現的理解

C. hadoop yarn源碼怎麼進行修改

第一個階段:學習hadoop基本使用和基本原理,從應用角度對hadoop進行了解和學習
這是第一個階段,你開始嘗試使用hadoop,從應用層面,對hadoop有一定了解,比如你可以使用hadoop shell對hdfs進行操作,使用hdfs API編寫一些程序上傳,下載文件;使用MapRece API編寫一個數據處理程序。一旦你對hadoop的基本使用方法比較熟悉了,接下來可以嘗試了解它的內部原理,注意,不需要通過閱讀源代碼了解內部原理,只需看一些博客,書籍,比如《Hadoop權威指南》,對於HDFS而言,你應該知道它的基本架構以及各個模塊的功能;對於MapRece而言,你應該知道其具體的工作流程,知道partition,shuffle,sort等工作原理,可以自己在紙上完整個畫完maprece的流程,越詳細越好。
在這個階段,建議你多看一些知名博客,多讀讀《hadoop權威指南》(可選擇性看相關的幾章)。如果你有實際項目驅動,那是再好不過了,理論聯系實際是最好的hadoop學習方法;如果你沒有項目驅動,那建議你不要自己一個人悶頭學,多跟別人交流,多主動給別人講講,最好的學習方式還是「講給別人聽」。
============
第二個階段:從無到入門,開始閱讀hadoop源代碼
這個階段是最困苦和漫長的,尤其對於那些沒有任何分布式經驗的人。 很多人這個階段沒有走完,就放棄了,最後停留在hadoop應用層面。
這個階段,第一件要做的事情是,選擇一個hadoop組件。如果你對分布式存儲感興趣,那麼你可以選擇HDFS,如果你讀分布式計算感興趣,你可以選擇MapRece,如果你對資源管理系統感興趣,你可以選擇YARN。
選擇好系統後,接下來的經歷是最困苦的。當你把hadoop源代碼導入eclipse或intellij idea,沏上一杯茶,開始准備優哉游哉地看hadoop源代碼時,你懵逼了:你展開那數不盡的package和class,覺得無從下手,好不容易找到了入口點,然後你屁顛屁顛地通過eclipse的查找引用功能,順著類的調用關系一層層找下去,最後迷失在了代碼的海洋中,如同你在不盡的壓棧,最後棧溢出了,你忘記在最初的位置。很多人經歷過上面的過程,最後沒有順利逃出來,而放棄。
如果你正在經歷這個過程,我的經驗如下:首先,你要摸清hadoop的代碼模塊,知道client,master,slave各自對應的模塊(hadoop中核心系統都是master/slave架構,非常類似),並在閱讀源代碼過程中,時刻謹記你當前閱讀的代碼屬於哪一個模塊,會在哪個組件中執行;之後你需要摸清各個組件的交互協議,也就是分布式中的RPC,這是hadoop自己實現的,你需要對hadoop RPC的使用方式有所了解,然後看各模塊間的RPC protocol,到此,你把握了系統的骨架,這是接下來閱讀源代碼的基礎;接著,你要選擇一個模塊開始閱讀,我一般會選擇Client,這個模塊相對簡單些,會給自己增加信心,為了在閱讀代碼過程中,不至於迷失自己,建議在紙上畫出類的調用關系,邊看邊畫,我記得我閱讀hadoop源代碼時,花了一疊紙。注意,看源代碼過程中,很容易煩躁不安,建議經常起來走走,不要把自己逼得太緊。
在這個階段,建議大家多看一些源代碼分析博客和書籍,比如《Hadoop技術內幕》系列叢書(軒相關網站:Hadoop技術內幕)就是最好的參考資料。藉助這些博客和書籍,你可以在前人的幫助下,更快地學習hadoop源代碼,節省大量時間,注意,目前博客和書籍很多,建議大家廣泛收集資料,找出最適合自己的參考資料。
這個階段最終達到的目的,是對hadoop源代碼整體架構和局部的很多細節,有了一定的了解。比如你知道MapRece Scheler是怎樣實現的,MapRece shuffle過程中,map端做了哪些事情,rece端做了哪些事情,是如何實現的,等等。這個階段完成後,當你遇到問題或者困惑點時,可以迅速地在Hadoop源代碼中定位相關的類和具體的函數,通過閱讀源代碼解決問題,這時候,hadoop源代碼變成了你解決問題的參考書。
============
第三個階段:根據需求,修改源代碼。
這個階段,是驗證你閱讀源代碼成效的時候。你根據leader給你的需求,修改相關代碼完成功能模塊的開發。在修改源代碼過程中,你發現之前閱讀源代碼仍過於粗糙,這時候你再進一步深入閱讀相關代碼,彌補第二個階段中薄弱的部分。當然,很多人不需要經歷第三個階段,僅僅第二階段就夠了:一來能夠通過閱讀代碼解決自己長久以來的技術困惑,滿足自己的好奇心,二來從根源上解決解決自己遇到的各種問題。 這個階段,沒有太多的參考書籍或者博客,多跟周圍的同事交流,通過代碼review和測試,證明自己的正確性。
============
閱讀hadoop源代碼的目的不一定非是工作的需要,你可以把他看成一種修養,通過閱讀hadoop源代碼,加深自己對分布式系統的理解,培養自己踏實做事的心態。

D. CDH版的hadoop有沒有源碼提供

首先,不得不說,hadoop發展到現在這個階段,代碼已經變得非常龐大臃腫,如果你直接閱讀最新版本的源代碼,難度比較大,需要足夠的耐心和時間,所以,如果你覺得認真一次,認真閱讀一次hadoop源代碼,一定要有足夠的心理准備和時間預期。 其次,需要注意,閱讀Hadoop源代碼的效率,因人而異,如果你有足夠的分布式系統知識儲備,看過類似的系統,則能夠很快地讀它的源代碼進行通讀,並快速切入你最關注的局部細節,比如你之前看過某個分布式資料庫的源代碼,對分布式系統的網路通信模塊,調度模塊等有一定了解,這對閱讀hadoop源代碼有極大幫助;如果你是一個初學者,對hadoop一無所知,只了解一些java語法,那閱讀hadoop源代碼是極具挑戰的一件事情,尤其是從無到開始入門的過程,是極度煎熬和困惑的,這時候需要你在閱讀代碼過程中,不斷補充缺乏的相關知識(比如RPC,NIO,設計模式等),循序漸進,直到入門。 接下來進入主題,說一下閱讀源代碼的個人經驗。由於我也是從無到入門,再到修改源代碼,逐步過渡的,所以,對於很多人而言,具有借鑒意義。 ============ 第一個階段:學習hadoop基本使用和基本原理,從應用角度對hadoop進行了解和學習 這是第一個階段,你開始嘗試使用hadoop,從應用層面,對hadoop有一定了解,比如你可以使用hadoop shell對hdfs進行操作,使用hdfs API編寫一些程序上傳,下載文件;使用MapRece API編寫一個數據處理程序。一旦你對hadoop的基本使用方法比較熟悉了,接下來可以嘗試了解它的內部原理,注意,不需要通過閱讀源代碼了解內部原理,只需看一些博客,書籍,比如《Hadoop權威指南》,對於HDFS而言,你應該知道它的基本架構以及各個模塊的功能;對於MapRece而言,你應該知道其具體的工作流程,知道partition,shuffle,sort等工作原理,可以自己在紙上完整個畫完maprece的流程,越詳細越好。 在這個階段,建議你多看一些知名博客,多讀讀《hadoop權威指南》(可選擇性看相關的幾章)。如果你有實際項目驅動,那是再好不過了,理論聯系實際是最好的hadoop學習方法;如果你沒有項目驅動,那建議你不要自己一個人悶頭學,多跟別人交流,多主動給別人講講,最好的學習方式還是「講給別人聽」。 ============ 第二個階段:從無到入門,開始閱讀hadoop源代碼 這個階段是最困苦和漫長的,尤其對於那些沒有任何分布式經驗的人。 很多人這個階段沒有走完,就放棄了,最後停留在hadoop應用層面。 這個階段,第一件要做的事情是,選擇一個hadoop組件。如果你對分布式存儲感興趣,那麼你可以選擇HDFS,如果你讀分布式計算感興趣,你可以選擇MapRece,如果你對資源管理系統感興趣,你可以選擇YARN。 選擇好系統後,接下來的經歷是最困苦的。當你把hadoop源代碼導入eclipse或intellij idea,沏上一杯茶,開始准備優哉游哉地看hadoop源代碼時,你懵逼了:你展開那數不盡的package和class,覺得無從下手,好不容易找到了入口點,然後你屁顛屁顛地通過eclipse的查找引用功能,順著類的調用關系一層層找下去,最後迷失在了代碼的海洋中,如同你在不盡的壓棧,最後棧溢出了,你忘記在最初的位置。很多人經歷過上面的過程,最後沒有順利逃出來,而放棄。 如果你正在經歷這個過程,我的經驗如下:首先,你要摸清hadoop的代碼模塊,知道client,master,slave各自對應的模塊(hadoop中核心系統都是master/slave架構,非常類似),並在閱讀源代碼過程中,時刻謹記你當前閱讀的代碼屬於哪一個模塊,會在哪個組件中執行;之後你需要摸清各個組件的交互協議,也就是分布式中的RPC,這是hadoop自己實現的,你需要對hadoop RPC的使用方式有所了解,然後看各模塊間的RPC protocol,到此,你把握了系統的骨架,這是接下來閱讀源代碼的基礎;接著,你要選擇一個模塊開始閱讀,我一般會選擇Client,這個模塊相對簡單些,會給自己增加信心,為了在閱讀代碼過程中,不至於迷失自己,建議在紙上畫出類的調用關系,邊看邊畫,我記得我閱讀hadoop源代碼時,花了一疊紙。注意,看源代碼過程中,很容易煩躁不安,建議經常起來走走,不要把自己逼得太緊。 在這個階段,建議大家多看一些源代碼分析博客和書籍,比如《Hadoop技術內幕》系列叢書(軒相關網站:Hadoop技術內幕)就是最好的參考資料。藉助這些博客和書籍,你可以在前人的幫助下,更快地學習hadoop源代碼,節省大量時間,注意,目前博客和書籍很多,建議大家廣泛收集資料,找出最適合自己的參考資料。 這個階段最終達到的目的,是對hadoop源代碼整體架構和局部的很多細節,有了一定的了解。比如你知道MapRece Scheler是怎樣實現的,MapRece shuffle過程中,map端做了哪些事情,rece端做了哪些事情,是如何實現的,等等。這個階段完成後,當你遇到問題或者困惑點時,可以迅速地在Hadoop源代碼中定位相關的類和具體的函數,通過閱讀源代碼解決問題,這時候,hadoop源代碼變成了你解決問題的參考書

E. 求Hadoop技術內幕-董西成書籍電子版百度雲資源

《Hadoop技術內幕:深入解析MapRece架構設計與實現原理》網路網盤txt 最新全集下載:

鏈接: https://pan..com/s/1q6JdsLpoTjaYW2goyjkc2Q

提取碼:NQCM

《Hadoop技術內幕:深入解析MapRece架構設計與實現原理》內容簡介:「Hadoop技術內幕」共兩冊,分別從源代碼的角度對「Common+HDFS」和「MapRece的架構設計和實現原理」進行了極為詳細的分析。《Hadoop技術內幕:深入解析MapRece架構設計與實現原理》由Hadoop領域資深的實踐者親自執筆,首先介紹了MapRece的設計理念和編程模型,然後從源代碼的角度深入分析了RPC框架、客戶端、JobTracker、TaskTracker和Task等MapRece運行時環境的架構設計與實現原理,最後從實際應用的角度深入講解了Hadoop的性能優化、安全機制、多用戶作業調度器和下一代MapRece框架等高級主題和內容。《Hadoop技術內幕:深入解析MapRece架構設計與實現原理》適合Hadoop的二次開...

F. 學習hadoop必須有java基礎嗎

作者:markxiao
鏈接:https://www.hu.com/question/34185054/answer/149007333
來源:知乎
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請註明出處。

hadoop一般在工業環境大部分是運行在linux環境下,hadoop是用java實現的。所以最好是熟悉linux環境下編程。至於java做到看得懂比較好,遇到問題可以看看源碼。
如果不會java,開源的可以用streaming寫maprece程序,只用跟stdin和stdout打交道就行了。網路之前開發出了bistreaming,hce組件,用這些組件寫c/c++就好了,不清楚有沒有開源。
如果你要定製化一些東西,比如inputformat/outputformat之類的,或者你想調用hdfs/yarn的java介面,懂java就很必要了。
至於hadoop學習路徑,主要基於我個人的學習路線來說得,可能不一定適合你,僅供參考,我對yarn和hdfs的細節了解不深,可能更多側重maprece。
(1)實踐:了解基本的maprece原理後,可以仿照demo寫一些maprece程序,然後查看任務監控頁面,了解監控頁面一些指標,這個是你分析任務很好的幫手。可以處理一些大的數據量,寫完了之後分析監控頁面的指標,思考這個任務還有沒有優化空間?任務哪部分耗時比較多比較多?如果失敗了,你能不能根據日誌定位到錯誤的地方?在此階段可能會遇到各種各樣的問題,比如streaming怎麼處理二進制數據,很多小文件導致性能低下。
(2)理論:經過一段時間的實踐,對mapce的思想應該比較熟悉了。這個時候可以看看maprece的運行過程,maprece的提交過程是怎麼樣?map輸出階段有哪些過程?shuffle過程是怎麼樣?在大數據量情況下怎麼保證rece階段,相同的key的記錄在一起的?
(3)讀源碼階段:如果你對maprece的使用和調優很熟練了,對源碼也有興趣,就可以看看源碼了。上層的有maprece,streaming;基礎點的可以看看hdfs,yarn的實現;底層的可以看看hadoop的rpc源碼實現。
最後,我只是根據我的經歷大致可以劃分這三個階段,三者完全可以穿插進行。

G. 業界主流的RPC框架有哪些Dubbo與Hadoop RPC的區別

Dubbo和Hadoop基本上就是兩個領域的產品,沒有太大的可比性。唯一能夠比較的是Dubbo和Hadoop內部使用的RPC組件:Avro。Avro多用於Hadoop內部,並沒有以獨立的RPC框架進行推廣和運作,因此你很少看到直接使用他的地方。
類似的還有ZooKeeper的內置框架:jute。而Dubbo則是一個完整的RPC解決方案,包括純粹的遠程過程調用,以及簡單的服務治理。是阿里巴巴在2012年開源的框架。

H. 如何設計一個rpc框架,從io模型 傳輸協議 序列化方式綜合考慮

在此之前,我們需要准備:
hadoop的源碼
protobuf 2.5版本
JDK
hadoop 2.x版本中採用了Protocol Buffer (簡稱protobuf)作為序列化和反序列化的工具,所以我們在修改源碼時需要按照相應規則編寫message來實現數據的傳輸。

閱讀全文

與hadooprpc源碼分析相關的資料

熱點內容
a4單片夾l型文件夾透明 瀏覽:621
聽聽呼嚕聲讓你解壓 瀏覽:708
編譯錯誤和功能錯誤的區別 瀏覽:877
如何過加密狗 瀏覽:275
交換機的代理伺服器如何設置 瀏覽:4
為什麼進體驗服顯示伺服器未響應 瀏覽:999
vs生成解決方案就是編譯嗎 瀏覽:960
怎樣獲得我的世界命令方塊兒 瀏覽:248
朗達眾包app哪裡下載 瀏覽:298
串口at命令 瀏覽:497
載入字體命令 瀏覽:721
python偽裝爬蟲 瀏覽:652
藍隊雲伺服器哪裡最好 瀏覽:814
ftp的伺服器連接如何保存 瀏覽:835
html裝修網站源碼 瀏覽:210
以太坊源碼p2p 瀏覽:564
按需的雲伺服器怎麼備案 瀏覽:849
怎麼讓安裝包適配安卓11 瀏覽:360
伺服器怎麼做垃圾桶 瀏覽:444
h3cping命令 瀏覽:750