org.apache.hadoop.hdfs 包内共包含10个类
1.DeprecatedUTF8 类
DeprecatedUTF8 类继承自 org.apache.hadoop.io.UTF8 类
源码中注释信息: A simple wrapper around org.apache.hadoop.io.UTF8. This class should be used only when it is absolutely necessary to use org.apache.hadoop.io.UTF8. The only difference is that using this class does not require @SuppressWarning annotation to avoid javac warning. Instead the deprecation is implied in the class name.
This should be treated as package private class to HDFS.
2.DFSConfigKeys 类
类继承关系如下图
源码中的注释信息:This class contains constants for configuration keys and default values used in hdfs.
该类只包含了hdfs中使用所有配置信息,并没有包含任何方法。这是值得学习的地方。另外该类继承的父类也是包含配置信息的类,在这种只有配置信息的地方使用继承也是值得学习的地方。
3.DFSUtil 类
类继承关系图如下图
该类方法众多,不过主要的方法集中在处理URI地址上了。
ConfigureNNAddress 是一个内部静态类,用于存储一个 NameNode 的配置信息。
ServiceComparator 是一个内部静态类,继承自 Comparator,该类主要用于对 DataNodeInfo[] 进行排序,decommissioned 节点将被移到列表的末尾。 ENTERING_MAINTENANCE 节点将被移到 live 节点后。
ServiceAndStaleComparator 是一个内部静态类,继承自 ServiceComparator. Stale 节点将被移到正常节点后
4.HAUtil 类
该类用于对处于HA(高可用 High Availability,HA) 方案模式下的NameNode的操作,包括获取 NameNodeID、获取配置信息、获取主 NameNode地址等
从上图中,我们可以看出 NameNode 的高可用架构主要分为下面几个部分:
Active NameNode 和 Standby NameNode:两台 NameNode 形成互备,一台处于 Active 状态,为主 NameNode,另外一台处于 Standby 状态,为备 NameNode,只有主 NameNode 才能对外提供读写服务。
主备切换控制器 ZKFailoverController:ZKFailoverController 作为独立的进程运行,对 NameNode 的主备切换进行总体控制。ZKFailoverController 能及时检测到 NameNode 的健康状况,在主 NameNode 故障时借助 Zookeeper 实现自动的主备选举和切换,当然 NameNode 目前也支持不依赖于 Zookeeper 的手动主备切换。
Zookeeper 集群:为主备切换控制器提供主备选举支持。
共享存储系统:共享存储系统是实现 NameNode 的高可用最为关键的部分,共享存储系统保存了 NameNode 在运行过程中所产生的 HDFS 的元数据。主 NameNode 和
NameNode 通过共享存储系统实现元数据同步。在进行主备切换的时候,新的主 NameNode 在确认元数据完全同步之后才能继续对外提供服务。
DataNode 节点:除了通过共享存储系统共享 HDFS 的元数据信息之外,主 NameNode 和备 NameNode 还需要共享 HDFS 的数据块和 DataNode 之间的映射关系。DataNode 会同时向主 NameNode 和备 NameNode 上报数据块的位置信息。
5.HdfsConfiguration 类
HdfsConfiguration 类继承自 Configuration 类, 主要方法 addDeprecatedKeys
6.HdfsDtFetcher 类
HdfsDtFetcher 类继承自 DtFetecher 接口
类注释:DtFetcher is an interface which permits the abstraction and separation of delegation token fetch implementation across different packages and compilation units. Resolution of fetcher impl will be done at runtime.
主要方法 addDelegationTokens
7.HDFSPolicyProvider 类
HDFSPolicyPorvider 类继承自 PolicyProvider 类
PolicyProvider 类用于提供Hadoop系统的安全定义。
主要方法 getServices
8.NameNodeProxies 类
类注释:Create Proxy objects to communicate with a remote NN. All remote access to an NN should be funneled through this class. Most of the time you’ll want to use NamenodeProxies.createProxy, which will create wither an HA- or non-HA-enabled client proxy as appropriate.
9.SWebHdfsDtFetcher 类
SWebHdfsDtFetcher 类继承自 HdfsFetcher 类
类注释:DtFetcher for SWebHdfsFileSystem using the base class HdfsDtFetcher impl.
主要方法 getServiceName
10.WebHdfsDtFetcher 类
WebHdfsDtFetcher 类继承自 HdfsFetcher 类
类注释:DtFetcher for WebHdfsFileSystem using the base class HdfsDtFetcher impl.