HDFS基本介绍

HDFS 是 Hadoop Distribute File System 的简称,意为:Hadoop 分布式文件系统。是 Hadoop 核心组件之一,作为最底层的分布式存储服务而存在。

分布式文件系统解决的问题就是大数据存储。它们是横跨在多台计算机上的存储系统。分布式文件系统在大数据时代有着广泛的应用前景,它们为存储和处理超大规模数据提供所需的扩展能力。

hadoop个文件系统之间关系 hadoop平台的文件系统为_HDFS


简记:将多个节点上的容量汇总到一起,拼接成一个大的文件系统,在一个节点上传数据,在其他的节点上都能够访问使用HDFS 使用 Master 金额 Slave 结构对集群进行管理。一般一个 HDFS 集群只有一个 NameNode 和一定数目的 DataNode 组成。NameNode 是 HDFS 集群主节点,DataNode 是 HDFS 集群从节点,两种角色各司其职,共同协调完成分布式的文件存储服务。

hadoop个文件系统之间关系 hadoop平台的文件系统为_文件系统_02


NameNode(Master)管理者 _ 只负责管理,管理集群内各个节点。

SecondaryNameNode 辅助管理者 _ 只负责负责 NameNode 管理工作

DateNode(Slave)工作者,是负责工作,周期想NameNode汇报,进行读写数据1)HDFS 集群包括,NameNode 和 DataNode 以及Secondary NameNode。

2)NameNode 负责管理整个文件系统的元数据,以及没一个路径(文件)所对应的的数据块信息。

3)DataNode 负责管理用户的文件数据块,,每一个数据块都可以在多个 datanode 上存储多个副本。

4)Secondary NameNode 用来监控 HDFS 状态的辅助后台程序,每隔一段时间获取 HDFS 元数据的快照。最主要作用是辅助 NameNode 管理元数据信息。

hadoop个文件系统之间关系 hadoop平台的文件系统为_hadoop个文件系统之间关系_03

HDFS分块存储

HDFS 将所有的文件全部抽象成为 block 块来进行存储,不管文件大小,全部一视同仁都是以 block 块的统一大小和形式进行存储,方便我们的分布式文件系统对文件的管理。
所有的文件都是以 block 块的方式存放在 HDFS 文件系统当中,在 Hadoop1 当中,文件的 block 块默认大小是64M,Hadoop2 当中,文件的 block 块大小默认就是128M,block 块的大小可以通过 hdfs-site.xml 当中的配置文件进行指定

<property>
        <name>dfs.block.size</name>
        <value>块大小 以字节为单位</value>//只写数值就可以
    </property>

hadoop个文件系统之间关系 hadoop平台的文件系统为_文件系统_04


事实上,128只是个数字,数据超过128M,便进行切分,如果没有超过128M,就不用切分,有多少算多少,不足128M的也是一个快。这个快的大小就是100M, 没有剩余28M这个概念。

抽象成数据块的好处

  1. 一个文件有可能大于集群中任意一个磁盘 20T/128 = xxx 块,这些 block 块属于一个文件
  2. 使用块抽象而不是文件,可以简化存储子系统。
  3. 块非常适合用于数据备份进而提供数据容错能力和可用性

块缓存

通常 DataNode 从磁盘中读取块,但对于访问频繁的文件,其余对应的块可能被显示的缓存在 DataNode 的内存中,以堆外块缓存的形式存在。默认情况下,一个块仅缓存在一个 DataNode 的内存中,当然可以针对每个文件配置 DataNode 的数量。作业调度器通过在缓存块的 DataNode 上运行任务,可以利用块缓存的优势提高读操作的性能。

HDFS副本机制

HDFS 视硬件错误为常态,硬件服务器随时有可能发生故障。
为了容错,文件的所有 block 都会有副本。每个文件的 block 大小和副本系数都是可以配置的。应用程序可以指定某个文件的副本数目。副本系数可以在文件创建的时候指定,也可以在之后改变。
数据副本默认保存三个副本,我们可以更改副本数以提高数据的安全性。
在 hdfs-site.xml 当中修改一下配置属性,即可更改文件的副本数。

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

低版本 Hadoop 副本节点选择

第一个副本在 client 所处对处的节点上。如果客户端在集群外,随机选一个。

第二个副本和第一个副本位于不相同机架随机节点上。

第三个副本和第二个副本位于相同机架上,节点随机。

hadoop个文件系统之间关系 hadoop平台的文件系统为_hadoop个文件系统之间关系_05


Hadoop2.7.2 副本节点选择

第一个副本在client所处节点上,如果客户端在集群外,随机选一个。

第二个副本和第一个副本位于相同机架,节点随机。

第三个副本位于逻辑距离最近的不相同机架上,节点随机。

hadoop个文件系统之间关系 hadoop平台的文件系统为_数据块_06

名字空间(NameSpace)

HDFS 支持传统的层次型文件组织结构。用户或者应用程序可以创建目录,然后将文件保存在这些目录里。文件系统名字空间的层次结构和大多数现有的文件系统类似:用户可以创建、删除、移动或重命名文件。

NameNode 负责维护文件系统的名字空间,任何对文件系统名字空间或属性的修改都将被 NameNode 记录下来。

HDFS 会给客户端提供一个统一的目录树,客户端通过路径来访问文件,形如:
hdfs://namenode:port/dir-b/dir-c/file.data。

NameNode 功能

一般吧目录结构及文件分块位置信息叫做元数据。NameNode 负责维护整个 HDFS 文件系统的目录树结构,以及每一个文件所对应的 block 块信息(block 的id,及所在的 DataNode 服务器)。

NameNode 节点负责确定指定的文件块到具体的 DataNode 节点的映射关系。在客户端与数据节点之间共享数据。

hadoop个文件系统之间关系 hadoop平台的文件系统为_数据块_07


管理 DataNode 节点的状态报告,包括 DataNode 节点的健康状态报告和其所在节点上数据块状态报告,以便能够及时处理失效的数据节点。

hadoop个文件系统之间关系 hadoop平台的文件系统为_hadoop个文件系统之间关系_08

DataNode 功能

文件的各个 block 的具体存储管理由 DataNode 节点承担。每一个 block 都可以在多个 DataNode 上。DataNode 需要定时向 NameNode 汇报自己持有的 block 信息。存储多个副本(副本数量也可以通过参数设置 dfs.replication,默认是 3)。

向 NameNode 节点报告状态。每个 DataNode 节点会周期性地向 NameNode 发送心跳信息和文件状态报告。

心跳是每三秒一次,心跳返回结果带有 NameNode 给该 DataNode 的命令如复制快数据到另一台机器,或删除某个数据块。如果超过十分钟没有收到某个 DataNode 的心跳,则认为该节点不可用。

DataNode 启动后向 NameNode 注册,通过后,周期性(1小时)的向 NameNode 上报所有的块信息。

hadoop个文件系统之间关系 hadoop平台的文件系统为_HDFS_09


执行数据的流水线复制。当文件系统客户端从 NameNode 服务器进程获取到要进行复制的数据块列表后,完成文件块及其块副本的流水线复制。一个数据块在 DataNode 上以文件形式存储在磁盘上,包括两个文件,一个是数据本身,一个元数据包括数据块的长度,块数据的校验和,以及时间戳。

hadoop个文件系统之间关系 hadoop平台的文件系统为_HDFS_10