Hadoop提供了一个被称为HDFS的分布式文件系统的实现。HDFS是Hadoop系统的基础层,主要负责数据的存储、管理和容错处理,设计思想来源于Google的GFS(Google File System)文件系统。HDFS是一个运行在普通的硬件之上的分布式文件系统,它和现有的分布式文件系统有着很多的相似性,然而和其他分布式文件系统的区别也很明显:HDFS是高容错性的,可以部署在低成本的硬件之上;HDFS提供高吞吐量以应对应用程序数据访问,适合大数据集的应用程序;HDFS放开一些POSIX的需求去实现流式地访问文件数据;HDFS最初是为开源的Apache项目Nutch的基础结构而创建;HDFS是Hadoop项目的一部分。
HDFS的特点
- HDFS认为硬件出现错误是经常发生的事情。HDFS部署在由廉价机器组成的集群中,整个集群中可能会有非常多的机器结点,结点的故障也是不可避免的,这种情况下,HDFS必须保证某些结点故障时,整个集群的工作不会受到影响。
- HDFS支持超大规模的数据集。
- HDFS采用“一次写入多次读取”的文件访问模型。HDFS简化了传统的文件访问模型,它假定当一个文件被创建、写入并关闭后就不会被修改了。
- HDFS提供了类似于流式的数据访问模式。并不是标准的流式,而是将数据以较小的数据包的形式进行传输,提供数据方法的吞吐量。
- HDFS提供了很强的容错处理能力。HDFS将大文件分割成很多文件块分开存储,并采用了完全备份的策略,每个文件块的副本数量最少是3个。
- HDFS具有很强的系统扩展性。HDFS可以动态的向集群中添加或者从集群中撤出结点。
- HDFS具有良好的平台移植性。由于HDFS是用Java语言开发的,所以它可以运行在Linux、Windows的等操作系统上,具有很好的可移植性。
HDFS文件系统架构
HDFS系统架构采用主从架构,整个集群由一个NameNode、一个SecondNameNode和若干个DataNode组成。NameNode是一个中心服务器,负责管理整个文件系统的命名空间元数据和客户端对文件的访问。SecondNameNode是NameNode的备份结点,定期对NameNode上的系统信息文件进行备份。一般情况下,一个结点运行一个DataNode,主要负责存储用户数据,并在NameNode的控制下进行数据的读写和出错处理。在HDFS内部,一个文件会被分隔成一个或多个Block,这些Block存储在DataNode上。