yarn的rpc介紹
yarn的rpc示例
截圖預覽
下面開始今天的内容分享。
我們知道在hadoop的rpc當中,其主要由rpc,client及server這三個大類組成,分别實作對外提供程式設計接口、用戶端實作及服務端實作。如下圖所示:
yarn對外提供的是yarnrpc這個類,這是一個抽象類,通過閱讀yarnrpc的源碼可以知道,實際的實作由參數
yarn.ipc.rpc.class設定,預設情況下,其值
為:org.apache.hadoop.yarn.ipc.hadoopyarnprotorpc,部分代碼如下:
yarnrpc:
yarnconfiguration類:
而hadoopyarnprotorpc 通過 rpc 的 rpcfactoryprovider 生成用戶端工廠(由參數
yarn.ipc.client.factory.class 指定,預設值是
org.apache.hadoop.yarn.factories.impl.pb.rpcclientfactorypbimpl)和伺服器工廠
(由參數 yarn.ipc.server.factory.class 指定,預設值是
org.apache.hadoop.yarn.factories.impl.pb.rpcserverfactorypbimpl),以根據通信協定
的 protocol buffers 定義生成用戶端對象和伺服器對象。相關類的部分代碼如下:
hadoopyarnprotorpc
rpcfactoryprovider
在 yarn 中并未使用hadoop自帶的writable來做序列化,而是使用 protocol buffers 作為預設的序列化機制,這帶來的好處主要有以下幾點:
繼承protocol buffers的優點:protocol buffers已被實踐證明其擁有高效性、可擴充性、緊湊性以及跨語言性等特點。
支援線上更新復原:在hadoop 2.x版本後,添加的ha方案,該方案能夠進行主備切換,在不停止nna節點服務的前提下,能夠線上更新版本。
yarn 的工作流程是先定義通信協定接口resourcetracker,它包含2個函數,具體代碼如下所示:
resourcetracker:
這裡resourcetracker提供了protocol buffers定義和java實作,其中設計的protocol
buffers檔案有:resourcetracker.proto、yarn_server_common_service_protos.proto
和yarn_server_common_protos.proto,檔案路徑在hadoop的源碼包的 hadoop-2.6.0-
src/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-
server-common/src/main/proto,這裡就不貼出3個檔案的具體代碼類,大家可以到該目錄去閱讀這部分代碼。這裡需要注意的是,
若是大家要編譯這些檔案需要安裝 protobuf 的編譯環境,環境安裝較為簡單,這裡給大家簡要說明下。
首先是下載下傳protobuf的安裝包,然後解壓,進入到解壓目錄,編譯安裝。指令如下:
最後編譯 .proto 檔案的指令:
下面,我們去收取hadoop源碼到本地工程,運作調試相關代碼。
testyarnserverapiclasses:
testresourcetrackerpbclientimpl:
接下來,我們使用junit去測試代碼,截圖預覽如下所示:
對testregisternodemanagerrequestpbimpl()方法的一個debug調試
testresourcetrackerpbclientimpl()方法的debug調試
這裡由于設定exception的狀态為true,在調用registernodemanager()時,會列印一條測試異常資訊。
在學習hadoop yarn的rpc時,可以先了解hadoop的rpc機制,這樣在接觸yarn的rpc的會比較好了解,yarn的rpc隻是其中的一部分,後續會給大家分享更多關于yarn的内容。
這篇部落格就和大家分享到這裡,如果大家在研究學習的過程當中有什麼問題,可以加群進行讨論或發送郵件給我,我會盡我所能為您解答,與君共勉!