Hadoop 分布式文件系统

写在前面

  • 写作不易,如果感觉有用,请打赏作者一杯咖啡~
  • 转载请联系作者,或者注明作者,以及原文链接!

Hadoop 分布式文件系统

Hadoop 自带一个称为hdfs的分布式文件系统,即 Hadoop Distributed Filesystem. 在非正式文档或旧文档以及配置文件中,有时也简称为DFS,他们指的是一回事。

HDFS的设计

HDFS以流式数据访问模式来存储超大文件,运行于商用软件集群上。具体如下。

  • 超大文件
    • 这里是指具有几百MB,几百GB甚至几百TB大小的文件。
  • 流式数据访问
    • hdfs的构建思路是这样的:一次写入,多次读取是最高效的的访问模式。数据通常有数据源生成或者复制而来,接着长时间在此数据集上进行各种分析。每次分析都将涉及该数据集的大部分数据甚至全部。因此读取整个数据集的时间延迟比读取第一条记录的延迟更重要。
  • 商用软件
    • hadoop 并不需要运行昂贵且高可靠的硬件上。他的设计运行在商用硬件的集群上的。
  • 低时间延迟的数据访问
    • 要求低时间数据访问的应用,例如几十毫秒范围,不适合在hdfs上运行。记住,HDFS是为高数据吞吐量应用优化的,这可能会以提高时间延为代价。
  • 大量的小文件
    • 由于namenode将文件系统的数据存储在内存中,因此该文件系统所能存储的文件总数受限于namenode的内存容量。所以不适用于大量的小文件
  • 多用户写入,任意修改文件
    • hdfs 中的文件写入只支持单个写入者,而且写操作总是以“只添加”方式在文件末尾写数据。它不支持多个写入者的操作,也不支持在文件的任意位置进行修改。

总结:
Hadoop适合于:

  • 1、超大数据的计算;
  • 2、一次写入、多次读取的模式;
  • 3、可以跑在普通的硬件上。

Hadoop不适合:

  • 1、低延迟的数据访问,它是为高数据吞吐量应用优化的;
  • 2、大量的小文件
  • 3、多用户写入,任意修改文件。

HDFS概念

  • 数据块

每个磁盘都有默认的数据块大小,这是磁盘进行数据读/写的最小单位。构建与单个磁盘之上的文件系统通过磁盘块来管理该文件系统的块,该文件系统的大小可以是磁盘块的整数倍。文件系统块一般为几千字节,而磁盘块一般为512字节。HDFS同样也有块的概念,但是大得多,默认是128MB。HDFS 上的文件也被划分为块大小的多个分块,作为独立的存储单元。但不同的是 HDFS中小于一个块大小的文件不会占据整个空间(例如,当一个1MB的文件存储在一个128MB的块中,文件只使用1MB的磁盘空间,而不是128MB)

  • 对分布式文件系统中的块进行抽象有什么好处?

    1. 一个文件的大小可以大于网络中任意的一个磁盘容量。文件的所有块并不需要存储在同一个磁盘上,因此,他们可以利用集群上的任意一个磁盘进行存储。
    2. 使用抽象快而非整个文件作为存储单元,大大简化了存储子系统的设计。简化是所有系统的目标,但是对于故障种类繁多的分布式系统来说尤为重要。将存储子系统的处理对象设为块,可简化存储管理,同时消除对元数据的顾虑。
    3. 还非常适合用于数据备份进而提供数据容错能力和提高可用性。
  • Namenode 和 DataNode

HDFS 集群有两类节点以管理节点-工作节点模式运行,即个namenode(管理节
点)和多个datanode 工作节点。

  • Namenode
    • 管理文件系统的命名空间,它维护着文件系统树及整棵树内的所有文件和目录。这些信息以两个文件形 式永人保存在本地做盘上: 命名空间镜像文件和编辑日志文件
  • DataNode

    • 是文件系统的工作节点。它们根据需要存储并检索数据块(受客户端或Namenode 调度)并且
      定期向Namenode发送它们所存储的块列表。
  • 没有namenode,文件系统将无法使用。事实上,如果运行Namenode服务的机器毁坏,文件系统上的所有文件将会丢失,因为我们不知道如何根提datanode的块重建文件。因此,对namencde实现容错非常重要,Hadop为此提供了什么机制?

    1. 备份那些组成文件系统元数据持久状态的文件Hadoop 可以通过配
      理置使namenode 在多个文件系统上保存元数据的持久状态。这些写操作是实时同步的,且是原子操作。一般的配置是,将持久状态写人本地磁盘的同时,写人一个
      远程挂载的网络文件系统(NFS)。

    2. 运行一个辅助namenode,但它不能被用作namenode.这个辅助namenode的重 要作用是定期合并编辑日志与命名空间镜像,以防止编辑日志过大。这个辅 助namenode一般在另一台单独的物理计算机上运行,因为它需要占用大量CPU 时间,并且需要与namenode一样多的内存来执行合并操作。它会保存合
      并后的命名空间镜像的副本,并在namenode发生故障时启用。但是辅助namenode 保存的状态总是带于主节点,所以在主节点全部失效时,难免会丢失部分数据。在这种情况下,一般把存储在NFS上namenode元数据复制到辅助namenode并作为新的namenode 运行。


坚持原创技术分享,您的支持将鼓励我继续创作!