HDFS 整体把握
对于HDFS这样一个分布式文件系统,它的目的是为了实现在多台廉价X86服务器上实现大文件存储。
HDFS 是仿造GFS 设计出来的。 如图所示, 这种实现方案是一种采取有一个中心节点, 多个数据节点围绕的方式。
这种设计
优点: 设计简单
缺点: 中心节是瓶颈。
按照这种设计 我们核心要解决的两个是
1 中心节点(Namenode)和数据节点(datanode)的数据怎么存储?
2 各个数据节点怎么通信?
例如我要把一个文件存在这个文件系统上。 假若这个文件命名为 ID0001。
对于问题1 。 namenode节点需要完成的核心任务如下 存储文件ID001文件名到具体存储这个文件的datanode之间的映射。
dantanode需要完成文件名(实际为文件ID)到linux文件系统具体存储路径的映射。 HDFS中采取的是hash表。
其实问题1的核心是实现K-V的存储。我们能找到的可以现在K-V存储的数据结构方式只有: 链表、 hash表、 红黑树这三种。 hdfs中根据需要和java语言特性,采用的是hash表。
对于问题二。 实际是网络通信问题。
根据应用需求
大体上可以分为两种通信需求,一种是各个节点之间交换元信息 它的特点是逻辑复杂,但数据量不大,hdfs中针对这点需求开发了自己的hadoop ipc
第二种是真正的数据通信。 它的特点是数据量巨大,hafs采取的是TCP协议。
对于这样一个主从式的分布式文件系统,我觉得把握住这两方面就可以从整体上看到这个文件系统的样子。 文件系统的两大核心问题就是
K-V存储 和 通信。