介绍
HDFS是Hadoop应用程序使用的主要分布式存储,主要被设计在商用硬件上运行,也就是说,他必须满足低成本、高容错、高吞吐的特性才能在众多的分布式存储系统中脱颖而出。
特点
- 低成本
HDFS实现的分布式存储实际是由数百个甚至数千个服务器提供的(目前Hadoop已经实现了两千多个节点的部署),这比单独使用一台大型服务器在遇到故障时的成本付出要少的多,现在如果某个服务器发生故障,我们只需要付出一台价廉服务器的成本。 - 高容错
由于HDFS是众多服务器一起实现分布存储,每个数据文件都有2个冗余备份,也就是每个数据文件都将被存储3次,如果存数据的某个服务器发生了故障,那么我们还有2个备份数据,所以HDFS是具有高容错性的,允许机器发生故障。 - 高吞吐
HDFS是“一次写入多次读写”的访问模型,除了在文件末尾追加或直接阶段文件,HDFS是不允许修改文件的,这就简化了数据一致性的问题,并且实现了高吞吐数据访问。 - 就近原则
简言之就是在数据附近执行程序要比将数据转移到程序所在的位置之后再执行效率要高,大大降低系统IO,“移动计算要比移动数据便宜”。 - 可移植性
HDFS可以实现不同平台之间的移植。
组成
HDFS具有主从架构,由文件系统元数据管理NameNode和实际数据存储DataNode组成。
一个HDFS集群只有一个NameNode,可以有许多DataNode,一个集群中有一个节点是主节点做为NameNode,其他节点是从节点做为DataNode。
HDFS的结构关系可以看下图:
分布式存储白话说
假设现在有一个1000MB的文件需要存储,首先HDFS先将这1000MB的文件分割成128MB大小的数据块,分别为1,2,3….8号,先对每个块复制2次,那么现在每个数据其实有3份;
接下来主节点(NameNode)会看看集群中的从节点(DataNode)哪些的空间比较大,将8*3的这些block分配到各个节点上,但必须保证每个block只能在一个从节点存储,额,也就是在 从节点 003号上只能存3号 block一次,另外2个3号block放到其他的 从节点 上。
至于NameNode是如何调度以及复制3次是为什么,我们下次再续。