Hadoop分布式文件系统(HDFS)简介

时间:2020-01-09 10:34:31  来源:igfitidea点击:

HDFS(Hadoop分布式文件系统)是一个分布式文件系统,是Hadoop框架的一部分。 Hadoop框架中的HDFS旨在存储和管理非常大的文件。在HDFS中,将大文件分为多个块,然后将这些块分布在群集的各个节点上。

当文件以分布式方式跨节点存储时,必须提供以下规定:

  • 如果节点坏了怎么办?
  • 如果块损坏了怎么办?

HDFS旨在在商用硬件上运行,因为这样节点发生故障的可能性也很高。

HDFS除了存储大文件之外,还可以管理所有这些情况并提供可靠的容错文件系统。

HDFS中的块大小

在任何文件系统中,读取和写入都是针对一个块进行的,该块是一次可以读取或者写入的数据量。作为示例,Windows的块大小为4 KB。由于Hadoop框架中的HDFS是为存储大文件而设计的,因此HDFS中的块大小也很大,在Hadoop 2.x版本中默认为128 MB,在Hadoop 1.x版本中为64 MB。

例如,如果我们将256 MB的文件放入块大小为128 MB的HDFS中,则该文件将被分为两个块,每个块128 MB。这两个块将分布在集群中的各个节点上。

此处请注意,如果文件小于128 MB,则在HDFS中不使用整个块。例如,如果文件大小为60 MB,则磁盘上将仅使用60 MB来存储该文件,而不是整个128 MB磁盘块。在Windows中,即使文件小于4 KB,也会占用磁盘上那么大的块大小。我们可以通过查看文件属性进行检查,在文件属性中,磁盘上将具有两个属性size和File size。

大块大小对HDFS有多大帮助

  • Namenode元数据–对于每个文件,Namenode会跟踪元数据信息,例如文件的块以及该块的存储位置。在该Namenode的顶部,将该元数据信息保留在RAM中,以便于访问。因此,具有较小的块将意味着Namenode会跟踪更多的块信息,从而导致其速度变慢。

  • 映射任务–运行MapReduce程序时,将为每个输入拆分(等于块)创建一个映射任务。具有较小的块将导致创建更多的Map任务,而要处理的数据要少得多。

  • 低延迟与高吞吐量– HDFS设计用于批处理,而不是用户交互使用。重点在于数据访问的高吞吐量,而不是数据访问的低延迟。如果块大小较小,我们可能会获得诸如减少将其通过网络发送到节点的时间之类的好处,一旦开始读取到达第一条记录所花费的块时间将再次减少,因为块大小较小但同时数据在一个块中处理将更少。因此,较小的块大小意味着存储和访问数据将花费较少的时间,但处理将花费更多的时间,这与HDFS的设计背道而驰。

Hadoop中的HDFS块复制

在多节点集群中(集群甚至可以运行到数千个节点),很可能发生其中一种情况-

  • 节点停止工作。

  • 到节点的网络连接停止工作。

  • 存储在节点上的文件块已损坏。

作为这些情况的补救措施,HDFS提供了冗余。默认情况下,每个块重复三次,这意味着一旦将文件划分为块,每个块将存储在三个不同的Datanodes中。万一Datanode停止响应,则另一个Datanode中有一个可用的冗余块。

作为示例–有两个文件logs.txt和clicks.txt存储在具有5个节点的群集中。将这些文件放入HDFS中后,这两个文件均分为两个块。

logs.txt –第1块,第2块
clicks.txt –第3块,第4块

然后,默认复制因子为3,跨5个节点的块分布可能看起来像给定的图像

配置HDFS默认块大小和复制因子

如果要更改默认块大小128 MB或者默认复制因子3,则必须在hadoop安装目录中编辑/etc/hadoop/hdfs-site.xml。

要更改块大小,请添加/编辑以下标签,此处以位为单位给出块大小– 128 MB = 128 * 1024 * 1024 = 13417728

<property> 
  <name>dfs.block.size<name> 
  <value>134217728<value> 
  <description>Block size<description> 
</property>

要更改复制因子,请添加/编辑以下标记-

<property>
  <name>dfs.replication</name>
  <value>3</value>
</property>

Namenode和Datanode

HDFS具有一个主/从体系结构,它由一个Namenode(主节点)和多个Datanode(从节点或者工作线程)组成。
Namenode管理文件系统名称空间,并管理客户端对文件的访问。 Namenode还确定块到DataNode的映射。

DataNodes管理添加到运行节点的存储,它们存储文件的块。数据节点还负责处理来自文件系统客户端的读写请求。

请参考HDFS中的NameNode,Secondary Namenode和Datanode来了解Hadoop中的NameNode,DataNode和Secondary Namenode。

要记住的要点

  • HDFS旨在与处理大型数据集的应用程序一起使用,其原理是一次写入,多次读取。这就是为什么尽管可以添加/截断文件但不允许任意更新的原因。

  • 放入HDFS的文件被分成多个块。在Hadoop 2.x版本中,默认块大小为128 MB。

  • 每个块都跨节点复制。默认复制因子为3.

  • 对于在HDFS中复制的文件,文件元数据存储在Namenode中。

  • 文件块存储在Datanodes上。