分布式文件系统HDFS简介
文件系统结构:
HDFS实现目标:
- 兼容廉价的硬件设备
- 实现流数据读写
- 支持大数据集
- 支持简单的文件模型
- 强大的跨平台兼容性
HDFS自身的局限性:
1.不适合低延迟数据访问
2. 无法高效存储大量小文件
3. 不支持多用户写入及任意修改文件
HDFS两大组件:
- 名称节点(Namenode)
其中名称节点包括FsImage(保存系统文件树)和EditLog(记录对数据进行的诸如创建、删除、重命名等操作)。
FsImage存储的元数据包括文件的复制等级、修改时间和访问时间、访问权限、块大小以及组成文件的块。另外,第二名称节点(SecondaryNamenode)的作用是作为名称节点(Namenode)的冷备份和对EditLog不断增大问题的处理。 - 数据节点(DataNode),负责具体数据的存储。
HDFS命名空间:包括目录、文件和块。
HDFS的通信协议如下图:
HDFS 1.0 版本的局限性: - 命名空间限制:名称节点是保存在内存中的,因此,名称节点能够容纳的对象(文件、块)的个数会受到空间大小的限制。
- 性能的瓶颈:整个分布式文件的吞吐量,受限于单个名称节点的吞吐量。
- 隔离问题:由于集群中只有一个名称节点,只有一个命名空间,因此无法对不同应用程序进行隔离。
- 集群的可用性:一旦这个唯一的名称节点发生故障,会导致整个集群变得不可用。
这些局限性在HDFS 2.0中都得到了解决,HDFS 2.0中设置了两个名称节点而且还设置成热备份。
HDFS的存储原理
- 冗余数据保存的问题
- 数据保存策略问题
- 数据恢复的问题
冗余数据保存的问题:一个数据都是以块保存,,默认冗余因子是3,一个数据会被默认保存为3份。
冗余的优点:加快数据传输速度、很容易检查数据错误以及保证数据可靠性。
数据存放策略:假如说冗余因子是3,当机器内部的数据节点写入数据时,数据块的第一个副本就放到写入数据节点的位置,第二个副本放在和第一个副本不同机器上面的数据节点,第三个副本放在和第一个副本同一个机器上面的不同数据节点上面。
数据读取策略如下图:
数据的错误与恢复包括名称节点出错、数据节点出错和数据本身出错三种情况。
名称节点出错:
数据节点出错:数据节点会一直与名称节点进行通信,告诉名称节点自己还处于活着的状态即心跳,如果数据节点出错了,名称节点就不会收到数据节点的通信信息(心跳)即处于宕机状态,这时名称节点就会把数据节点的数据备份到其他正常的数据节点。
数据本身出错: 数据出错是通过判断校验码来进行的。如下图所示: