1) NameNode启动的时候,开启一个ipc server。
2) DataNode启动时,通过“握手”的方式与NameNode节点连接,之所以采用“握手”方式(参Datanode.java的handshake()),是为了验证DataNode的namespaceID以及layoutVersion。如果一个节点的namespaceID或者layoutVersion不匹配,那么DataNode节点就会自动关闭。namespaceID是在文件系统format的时候就分配好的。namespaceID被在集群内的所有节点上都有持久化存储。
3)handshake之后,DataNode被注册到NameNode(参考Datanode.java的register())。DataNode持久化保存其唯一的storageID。storageID是一个DataNode的内部标识符,该标识符能够确保即使是服务器用不同的IP地址或者端口启动,仍然可以被识别。storageID在DataNode首次注册到NameNode时即被分配,一旦分配后便无法更改,一个DataNode节点中所有存储路径的storageID是一样的。我们可以通过查看DataNode启动日志:DatanodeRegistration(192.168.0