HDFS
是Hadoop Distribute File System
的简称,意为:Hadoop 分布式文件系统,是一种旨在在商品硬件上运行的分布式文件系统。它与现有的分布式文件系统有许多相似之处。但是,与其他分布式文件系统的区别很明显。HDFS具有高度的容错能力,旨在部署在低成本硬件上。HDFS提供对应用程序数据的高吞吐量访问,并且适用于具有大数据集的应用程序。HDFS放宽了一些POSIX要求,以实现对文件系统数据的流式访问。HDFS最初是作为Apache Nutch Web
搜索引擎项目的基础结构而构建的。HDFS是Apache Hadoop Core
项目的一部分,是 Hadoop 核心组件之一,作为最底层的分布式存储服务而存在。
HDFS采用主/从体系结构,整个HDFS集群由一个Namenode和多个Datanode构成master-worker(主从)模式。Namenode负责构建命名空间,管理文件的元数据等,Datanode负责实际存储数据和处理来自系统客户端的读写请求。
群集中单个NameNode的存在极大地简化了系统的体系结构。NameNode是所有HDFS元数据的仲裁器和存储库。该系统的设计方式使用户数据永远不会流过NameNode。
具体来说,HDFS由四部分组成,HDFS Client、NameNode、DataNode和Secondary NameNode。
**HDFS客户端:**就是客户端。 1、提供一些命令来管理、访问 HDFS,比如启动或者关闭HDFS。 2、与 DataNode 交互,读取或者写入数据;读取时,要与 NameNode 交互,获取文件的位置信息;写入 HDFS 的时候,Client 将文件切分成 一个一个的Block,然后进行存储。
**NameNode:**即Master, 1、管理 HDFS 的名称空间。 2、管理数据块(Block)映射信息 3、配置副本策略 4、处理客户端读写请求。
**DataNode:**就是Slave。NameNode 下达命令,DataNode 执行实际的操作。 1、存储实际的数据块。 2、执行数据块的读/写操作。
**Secondary NameNode:**并非 NameNode 的热备。当NameNode 挂掉的时候,它并不能马上替换 NameNode 并提供服务。 1、辅助 NameNode,分担其工作量。 2、定期合并 fsimage和fsedits,并推送给NameNode。 3、在紧急情况下,可辅助恢复 NameNode。
HDFS支持传统的分层文件组织。用户或应用程序可以创建目录并将文件存储在这些目录中。文件系统名称空间层次结构与大多数其他现有文件系统相似。可以创建和删除文件,将文件从一个目录移动到另一个目录或重命名文件。HDFS支持用户配额和访问权限。HDFS不支持硬链接或软链接。但是,HDFS体系结构并不排除实现这些功能。 尽管HDFS遵循FileSystem的命名约定,但某些路径和名称(例如
/.reserved
和.snapshot
)被保留。功能,如透明加密和快照使用预约路径。 NameNode维护文件系统名称空间。对文件系统名称空间或其属性的任何更改均由NameNode记录。应用程序可以指定应由HDFS维护的文件副本的数量。文件的副本数称为该文件的复制因子。此信息由NameNode存储。
HDFS旨在在大型群集中的计算机之间可靠地存储非常大的文件。它将每个文件存储为一系列块。复制文件的块是为了容错。块大小和复制因子是每个文件可配置的。
文件中除最后一个块外的所有块都具有相同的大小,而在添加了对可变长度块的支持后,用户可以在不填充最后一个块的情况下开始新的块,而不用配置的块大小。
应用程序可以指定文件的副本数。复制因子可以在文件创建时指定,以后可以更改。HDFS中的文件只能写入一次(追加和截断除外),并且在任何时候都只能具有一个写入器。
NameNode做出有关块复制的所有决定。它定期从群集中的每个DataNode接收心跳信号和Blockreport。收到心跳信号表示DataNode正常运行。Blockreport包含DataNode上所有块的列表。