在Hadoop生态系统中,Hadoop分布式文件系统(HDFS)是非常关键的一环,它为管理大数据资源池和支撑相关大数据分析应用提供了一个具有高可靠性的工具。在分布式存储领域,HDFS也扮演着重要角色,是作为系统架构师必须了解的分布式文件系统之一。
HDFS的工作原理
HDFS支持在计算节点之间快速传输数据。在开始阶段,它与MapReduce紧密耦合——MapReduce是一个用于大规模数据集的并行运算的编程框架。
当HDFS接收数据时,会将信息分解为单独的块,并将它们分布到集群中的不同节点,从而支持高效的并行处理。
此外,HDFS专门设计有高容错的特性。HDFS可以多次复制每个数据片段,并将副本分发给各个节点,将至少一个副本放在其他服务器机架上。因此,在集群中的其他地方也可以找到崩溃节点上的数据。这确保了在恢复数据时可以继续进行处理。
HDFS使用主/从架构。在其最初版本中,每个Hadoop集群由一个NameNode(用于管理文件系统运行)和支持DataNode(用于管理单个计算节点上的数据存储)组成。这些HDFS元素结合起来,可支持具有大数据集的应用程序。
这个主节点“数据分块”架构,从谷歌文件系统(GFS)以及IBM的通用并行文件系统(GPFS)中吸取了部分设计指导元素。GFS是一个可扩展的分布式文件系统,用于大型的、分布式的、对大量数据进行访问的应用。它运行于廉价的普通硬件上,并提供容错功能,可以给大量的用户提供总体性能较高的服务。GPFS是一种专门为集群环境设计的高性能、可扩展的并行文件系统,可以在集群中的多个节点间实现对共享文件系统中文件的快速存取操作,并提供稳定的故障恢复和容错机制。此外,虽然HDFS不是与可移植操作系统接口(POSIX)的模型兼容的,但它在某些方面也与POSIX设计风格相呼应。
HDFS架构图-应用程序通过Client与NameNode和DataNode进行交互
为什么要使用HDFS
HDFS最早出自雅虎,用于满足该公司广告服务和搜索引擎的部分需求。与其他面向Web的公司一样,雅虎发现自己需要处理的应用程序的用户访问越来越多,而这些用户正在产生越来越多的数据。后来,Facebook、eBay和Twitter等公司也开始使用HDFS作为大数据分析的基础,来解决相同的需求。
但HDFS的用途远不止于此。上述所提到的大规模Web搜索,我们可以将其归类于数据密集型并行计算。此外,HDFS也常用于计算密集型并行计算应用场景,如气象计算。在数据密集与计算密集混合型场景中也多有应用,如3D建模与渲染。HDFS也是许多开源数据仓库(有时称为数据湖,Data Lake)的核心。
HDFS通常用于大规模部署,因为它具备一个重要特性,就是可运行在普通廉价机器上。还有,例如运行Web搜索和相关应用程序的这种系统,往往需要可以扩展到数百PB和数千个节点,因此系统必须拥有易于扩展的特性,这正是HDFS所具备的。此外,服务器故障在这种规模下很常见,HDFS所提供的容错能力在这方面也很有实际价值。
不适用于HDFS的场景
首先,HDFS不适用于对延迟要求较高的场景,如实时查询。在延迟方面,HDFS没有充分的优势。其次,HDFS也难以支持大量小文件的存储。在Hadoop系统中,通常将“小文件”定义为远小于HDFS的block size(默认64MB)的文件,由于每个文件都会产生各自的MetaData元数据,Hadoop通过Namenode来存储这些信息,若小文件过多,容易导致占用大量NameNode内存,也会使寻道时间超过读取时间,为系统带来性能瓶颈。
此外,HDFS不支持多用户写入,也无法进行文件随机修改。仅支持以append的方式,即通过追加的方式添加到文件结尾处。HDFS适用于存储半结构化和非结构化数据,若有数据严格的结构化特性,强行采用HDFS是不合适的。最后,HDFS适用于TB、PB级的大数据处理,文件数量通常在百万以上,如果数据量很小,完全没有必要采用HDFS。
HDFS和Hadoop的历史
这里简要说一些关键的时间节点。2006年,Apache Hadoop项目正式启动,HDFS和MapReduce开始独立发展。该软件开始广泛应用于各行各业的大数据分析项目中。2012年,HDFS和Hadoop版本1.0发布。
2013年Hadoop 2.0版本加入了通用YARN资源管理器,MapReduce和HDFS有效解耦。此后,Hadoop支持各种数据处理框架和文件系统。虽然MapReduce经常被Apache Spark所替代,但HDFS仍然是Hadoop的一种流行的文件格式。
在发布了四个alpha版本和一个beta版本之后,Apache Hadoop 3.0.0在2017年12月开始普遍可用,HDFS增强支持额外的NameNode、擦除编码工具和更大的数据压缩。与此同时,HDFS工具,如LinkedIn的开源Dr. Elephant和Dynamometer 性能测试工具的进步,也使HDFS能够支持更进一步的开发实现。