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。