一.背景
当数据集的大小超过一台独立物理计算机的存储能力时,就有必要对它进行分区(partition) 并存储到若干台单独的计算机上。管理网络中跨多台计算机存储的文件系统称为分布式文件系统 (distributed filesystem ) 。该系统架构于网络之上,势必会引入网络编程的复杂性,因此分布式文件系统比普通磁盘文件系统更为复杂。例如,使文件系统能够容忍节点故障且不丢失任何数据,就是一个极大的挑战。Hadoop 为有一个称为 HDFS 为 的分布式系统,全称为Hadoop Distributed Filesystem,在非正式文档或旧文档以及配置文件中,有时也简称为 DFS。
二.概念
HDFS 集群有两类节点,并以管理者-工作者模式运行,即一个namenode( 管理者)和多个datanode( 工作者 )。
NameNode是HDFS架构中的主节点。它维护着文件系统树及整棵树内所有的文件和目录。这些信息以两个文件形式永久保存在本地磁盘上:命名空间镜像文件(fs-image)和编辑日志(edit-logs)文件。也记录着每个文件中各个块所在的数据节点信息,但它并不永久保存块的位置信息,因为这些信息会在系统启动时由数据节点重建。
功能
管理各个从节点的状态(DataNode)。
记录存储在HDFS上的所有数据的元数据信息。例如:block存储的位置,文件大小,文件权限,文件层级等等。这些信息以两个文件形式永久保存在本地磁盘上。
命名空间镜像文件(FsImage): fsimage是HDFS文件系统存于硬盘中的元数据检查点,里面记录了自最后一次检查点之前HDFS文件系统中所有目录和文件的序列化信息
编辑日志(edit-logs) 文件:保存了自最后一次检查点之后所有针对HDFS文件系统的操作,比如:增加文件、重命名文件、删除目录等等。
记录了存储在HDFS上文件的所有变化,例如文件被删除,namenode会记录到editlog中。
接受DataNode的心跳和各个datanode上的block报告信息,确保DataNode是否存活。
负责处理所有块的复制因子。 如果DataNode节点宕机,NameNode会选择另外一个DataNode均衡复制因子,并做负载均衡。
DataNode是HDFS架构的从节点,管理各自节点的Block信息。datanode是文件系统的工作节点。它们根据需要存储并检索数据块(受客户端或namenode调度),并且定期向namenode 发送它们所存储的块的列表。
功能
多个DataNode分别运行在独立的节点上。
数据实际是存储到DataNode上面。
DataNode执行客户端级别的读写请求。
向NameNode发送心跳(默认是3s),报告各自节点的健康状况。
Sencondary NameNode是NameNode的助手,不要将其理解成是NameNode的备份。 Secondary NameNode的整个目的在HDFS中提供一个Checkpoint Node,所以也被叫做checkpoint node。、
功能
定时的从NameNode获取EditLogs,并更新到FsImage上。
一旦它有新的fsimage文件,它将其拷贝回NameNode上,NameNode在下次重启时回使用这个新的fsimage文件,从而减少重启的时间。
客户端(Client)
Client代表用户通过namenode和datanode访问整个文件系统。客户端提供一个类似于POSIX(可移植操作系统界面)的文件系统接口,因此用户在编程时无需知道namenode和datanode也可实现其功能。
复制因子
HDFS为我们提供了可靠的存储,就是因为这个复制因子。默认复制因子是3。DataNode会定时发送心跳给NameNode,汇报各自节点的Block信息。NameNode收集到这些信息后,会对超出复制因子的Block删除,复制因子不足的Block做添加。