3.1 DatanodeID
這個類就是定義一下Datanode的身份證。
一個DatanodeID是由以下四部分組成的。
protected String name; /// 主機名:端口號
protected String storageID; /// unique per cluster storageID
protected int infoPort; /// the port where the infoserver is running
protected int ipcPort; /// the port where the ipc server is running
infoPort是Server的一個端口號。
ipcPort當NameNode和DataNode進行連接時,或者是DataNode之間通訊的時候所使用的一個端口號。
public DatanodeID(DatanodeID from) 這個構造函數用於拷貝另外的一個節點
這個類主要定義了這個DataNode的HostName、Port、infoPort和ipcPort這些東西同時有些函數來set和get他們。
它的hashcode是name.hashCode()^ storageID.hashCode(); 做了一個異或處理。
updateRegInfo(DatanodeID nodeReg) 從這句我們可以看出DatanodeID對象的域的更新可以更新它的Name和它的infoPort兩項內容,而storageID是不可更新的。
如果進行兩個DatanodeID的比較的話主要是比較他們的name,可以從下面的代碼中得出。
public int compareTo(DatanodeID that) {
return name.compareTo(that.getName());
}
圖3.1 DatanodeID的類圖
問題6:這個更新的請求是誰發出的?是由NameNode發出的嗎?
3.2 DatanodeRegistration
這個類主要用於,當Datanode向Namenode發送註冊信息時,它要向Namenode提供一些自己的註冊信息。也就是Datanode想在派出所(Namenode)辦戶口的時候,首先要填一張表給派出所。
同時這個類中還可以設置它的父類就是DatanodeID的Name、infoPort、storageInfo這些內容。
當進行註冊的時候要提供的東西,public DatanodeRegistration(String nodeName)和
3.2.1 WritableFactories
定義一個類工廠,能夠創建一個非公有的類的實例。可以看出這個類使用了單態模式。它在類中定義了一個HashMap<Class, WritableFactory> CLASS_TO_FACTORY =
new HashMap<Class, WritableFactory>();它的Key是Class,Value是WritableFactory。