Hdfs

来自站长百科
跳转至: 导航、​ 搜索

hdfs(Hadoop Distributed File System)是Apache Hadoop生态系统中的一部分,是一个用于存储大数据的分布式文件系统。它被设计用来运行在廉价的硬件上,并且提供了高容错性、高吞吐量以及适应大规模数据处理的能力。

体系结构[ ]

hdfs采用了主从(Master/Slave)结构模型,一个hdfs集群是由一个NameNode和若干个DataNode组成的。其中NameNode作为主服务器,管理文件系统的命名空间和客户端对文件的访问操作;集群中的DataNode管理存储的数据。

设计特点[ ]

  • 大数据文件存储:hdfs非常适合存储T级别(TB)的大文件或者一大批大文件。它优化了大文件的存储和读取,能够有效地处理大规模的数据集。
  • 高容错性:hdfs具有很高的容错性,即使在个别节点失效的情况下,也能保证数据不丢失。这是因为hdfs会将数据自动复制到多个节点上,即使某些节点出现问题,其他节点上的数据仍然可以保证整个系统的正常运行。
  • 流式数据访问:hdfs放宽了POSIX的一部分约束,实现了流式读取,这意味着数据可以在写入后立即被读取,而不需要等待所有的数据都被写入。这种设计使得hdfs非常适合于流式数据处理。
  • 廉价硬件集群:hdfs设计之初就考虑到了成本因素,它可以在由普通硬件组成的集群上运行,不需要昂贵的服务器或存储设备。这使得hdfs成为成本效益很高的存储解决方案。

文件命名空间[ ]

hdfs支持传统的继承式的文件组织结构。一个用户或一个程序可以创建目录,存储文件到很多目录之中。文件系统的名字空间层次和其他的文件系统相似。可以创建、移动文件,将文件从一个目录移动到另外一个,或重命名。hdfs还没有实现用户的配额和访问控制。hdfs还不支持硬链接和软链接。然而,hdfs结构不排斥在将来实现这些功能。

名字节点维护文件系统的命名空间,任何文件命名空间的改变和或属性都被名字节点记录。应用程序可以指定文件的副本数,文件的副本数被称作文件的复制因子,这些信息由命名空间来负责存储。

异常处理[ ]

可靠性[ ]

hdfs的主要目标就是在存在故障的情况下也能可靠地存储数据。三个最常见的故障是名字节点故障,数据节点故障和网络断开。

重新复制[ ]

  • 一个数据节点周期性发送一个心跳包到名字节点。网络断开会造成一组数据节点子集和名字节点失去联系。名字节点根据缺失的心跳信息判断故障情况。名字节点将这些数据节点标记为死亡状态,不再将新的IO请求转发到这些数据节点上,这些数据节点上的数据将对hdfs不再可用,可能会导致一些块的复制因子降低到指定的值。
  • 名字节点检查所有的需要复制的块,并开始复制他们到其他的数据节点上。重新复制在有些情况下是不可或缺的,例如:数据节点失效,副本损坏,数据节点磁盘损坏或者文件的复制因子增大。

数据正确性[ ]

从数据节点上取一个文件块有可能是坏块,坏块的出现可能是存储设备错误,网络错误或者软件的漏洞。hdfs客户端实现了hdfs文件内容的校验。当一个客户端创建一个hdfs文件时,它会为每一个文件块计算一个校验码并将校验码存储在同一个hdfs命名空间下一个单独的隐藏文件中。当客户端访问这个文件时,它根据对应的校验文件来验证从数据节点接收到的数据。如果校验失败,客户端可以选择从其他拥有该块副本的数据节点获取这个块。

元数据失效[ ]

FsImage和Editlog是hdfs的核心数据结构。这些文件的损坏会导致整个集群的失效。因此,名字节点可以配置成支持多个FsImage和EditLog的副本。任何FsImage和EditLog的更新都会同步到每一份副本中。

相关条目[ ]