分布式文件系统就是把文件分布存储到多个计算机节点上,成千上万的计算机节点构成计算机集群。这些节点分为两类。

  • 一类叫做“主节点”(Master Node),也叫做“名称节点”(Name Node)
  • 另一类叫“从节点”(Slave Node)或者也被称为“数据节点”(DataNode)

1.HDFS

总体而言,HDFS要实现以下目标:
 兼容廉价的硬件设备
 流数据读写
 大数据集
 简单的文件模型
 强大的跨平台兼容性
HDFS特殊的设计,在实现上述优良特性的同时,也使得自身具有一些应用局 限性,主要包括以下几个方面:
 不适合低延迟数据访问  无法高效存储大量小文件  不支持多用户写入及任意修改文件

1.1 块

HDFS默认一个块64MB,一个文件被分成多个块,以块作为存储单位
带来的好处有:

  • 支持大规模文件存储
  • 简化系统设计
  • 适合数据备份
1.2 名称节点和数据节点

hdfs 查看节点别名 hdfs名称节点_HDFS


• 在HDFS中,名称节点(NameNode)负责管理分布式文件系统的命名空间(Namespace),保 存了两个核心的数据结构,即FsImage和EditLog

• FsImage用于维护文件系统树以及文件树中所有的文件和文件夹的元数据

• 操作日志文件EditLog中记录了所有针对文件的创建、删除、重命名等操作

• 名称节点记录了每个文件中各个块所在的数据节点的位置信息,但并不是持久化存储这些信息,而是在系统每次启动时扫描所有数据节点重构得到这些信息。

hdfs 查看节点别名 hdfs名称节点_数据_02


• FsImage文件包含文件系统中所有目录和文件inode的序列化形式。每个inode是一个文件或目录的元数据的内部表示,并包含此类信息:文件的复制等级、修改和访问时间、访问权限、块大小以及组成文件的块。对于目录,则存储修改时间、权限和配额元数据

• FsImage文件没有记录文件包含哪些块以及每个块存储在哪个数据节点。而是由名 称节点把这些映射信息保留在内存中,当数据节点加入HDFS集群时,数据节点会把自己所包含的块列表告知给名称节点,此后会定期执行这种告知操作,以确保名称节点的块映射是最新的。

名称节点的启动

在名称节点启动的时候,它会将FsImage文件中的内容加载到内存中,之后再执行 EditLog文件中的各项操作,使得内存中的元数据和实际的同步,存在内存中的元数 据支持客户端的读操作。
• 一旦在内存中成功建立文件系统元数据的映射,则创建一个新的FsImage文件和一个 空的EditLog文件
• 名称节点起来之后,HDFS中的更新操作会重新写到EditLog文件中,因为FsImage文 件一般都很大(GB级别的很常见),如果所有的更新操作都往FsImage文件中添加 ,这样会导致系统运行的十分缓慢,但是,如果往EditLog文件里面写就不会这样, 因为EditLog 要小很多。每次执行写操作之后,且在向客户端发送成功代码之前, edits文件都需要同步更新

当名称节点重启的时候,名 称节点需要先将FsImage里面的所有内容映像到内存中,然后再一条一条地执行EditLog 中的记录,当EditLog文件非常大的时候,会导致名称节点启动操作非常慢,而在这段 时间内HDFS系统处于安全模式,一直无法对外提供写操作,影响了用户的使用。
解决办法是第二名称节点(:SecondaryNameNode)

第二名称节点是HDFS架构中的一个组成部分,它是用来保存名称节点中对HDFS 元 数据信息的备份,并减少名称节点重启的时间。SecondaryNameNode一般是单独运 行在一台机器上

hdfs 查看节点别名 hdfs名称节点_大数据_03


数据节点(DataNode)

• 数据节点是分布式文件系统HDFS的工作节点,负责数据的存储和读取,会根据客户端或

者是名称节点的调度来进行数据的存储和检索,并且向名称节点定期发送自己所存储的块

的列表

• 每个数据节点中的数据会被保存在各自节点的本地Linux文件系统中