HDFS原始碼分析 RPC Client實現

2021-06-09 18:46:42 字數 1981 閱讀 9098

通俗來講rpc

(remote procedure call

)就是呼叫遠端的過程或者方法,既然涉及到遠端,必然會有

c/s架構,即

client

和server

。下面首先來看一下

client

端的實現。

為實現遠端方法呼叫,最重要的就是跟遠端伺服器進行連線,然後不斷的傳輸客戶端想要呼叫的方法,包括方法的引數等。為此client

有兩個最重要的變數與之一一對應,

connection

和call

。其中,

connection

代表與遠端伺服器之間的連線;

call

是乙個方法呼叫的抽象。

connection

有乙個佇列,儲存所有需要到該

connection

對應的伺服器進行呼叫的方法。因為乙個

client

可能同時需要到多個伺服器進行方法呼叫,如

hdfs

一次檔案操作,不但需要跟

namenode

進行通訊,還需要與

datanode

進行通訊;因此,

client

會包含乙個

connection

的佇列。為了區分不同的

connection

,client

定義了另外乙個

class connectionid

來標識不同的連線。

下面我看一下call

的實現,

call

具體是比較簡單的,如下**:

private

class call {

intid; // call id

writable param; // parameter

writable value; // value, null if error

ioexception error; // exception, null if value

boolean

done; // true when call is done

protected call(writable param) {

this.param = param;

synchronized (client.this) {

this.id = counter++;

下面jurisdiction

解析一下其不同成員變數的意義,

id是在同乙個

connection

上不同方法呼叫的標識;

param

是client

傳向伺服器端的資料,一會具體分析;

value

是返回結果。其中我們具體分析一下

param

,在call

中param

的具體實現是

class invocation

,invocation

具體代表了乙個方法,其實現如下:

private

static

class invocation implements writable, configurable {

private string methodname;

private class parameterclasses;

private object parameters;

private configuration conf;

其中,methodname

代表遠端呼叫的方法的名字;

parameterclasses

代表傳入方法引數的型別;

parameters

代表傳入方法引數的值。

如此結合另外一篇檔案《hadoop rpc

整個使用流程——以

datanode 

向namenode

註冊為例》則整個

rpc的過程就比較容易理解了。

HDFS原始碼分析DataXceiver之讀資料塊

process op by the corresponding method.protected final void processop op op throws ioexception 那麼今天,我們首先來看下第一種資料讀寫請求 讀資料塊read block,它是通過呼叫opreadblock ...

HDFS的DataNode原始碼分析

1.大致流程 datanode.main 入口函式 securemain args,null createdatanode args,null,resources 建立datanode instantiatedatanode args,conf,resources getstoragelocatio...

client讀寫hdfs的原始碼分析總結

週末花了一天的時間仔細了重溫了一下client對hdfs檔案的讀寫過程,總結如下 每次讀寫都是以乙個資料塊的形式來進行的,並且包括資料內容和資料的校驗值。另外,到 namenode 上獲取相應的資訊都是用 rpc來通訊的,而到 datanode 獲取真正的資料塊內容是由 socket 的網路流來進行...