HDFS(Hadoop Distributed File System)原理

1、分布式文件系统


1)为什么需要分布式文件系统?

传统的文件系统最大的问题是容量和吞吐量的限制。多用户应用的并行读写是分布式文件系统产生的根源。

2、HDFS设计目标

  • 基于廉价的普通硬件,可以容忍硬件出错;
  • 可以处理大数据集    
  •     HDFS的存储量可以达到PB,EB级别,适合存储单个大文件
  • 简单的一致性模型
  • 一次写入,多次读取(不支持多用户同时写);支持追加操作,无法更改已写入数据。
  • 顺序的数据流访问
  • HDFS适合于处理批量数据,而不适合用于随机定位访问。
  • 侧重高吞吐,可以容忍高延迟
  • 计算靠近数据
  • 分布式文件系统管理的物理存储资源不一定直接连接在本地节点上,而是通过计算机网络与节点连接。因此,尽量在数据所在节点进行计算,减少数据移动的网络开销。

3、架构图和工作原理

                   

hadoop文件操作 hadoop文件系统的工作原理_HDFS


                                            图 1 HDFS架构图

(1)Hadoop 组件

    NameNode(NN):用于管理文件系统命名空间的组件。Hadoop 2.x之前存在单点故障问题,Hadoop 3.x开始支持多个NameNode元数据(Metadata)保存在NameNode的内存中,1G内存大概可以管理64T实际数据。

    DataNode(DN): 用于管理实际数据文件的组件。HDFS将一个大的文件分为多个块(block)来存储,以块为单位进行管理。默认块大小为64M。与传统文件系统不同的是,即使实际数据没有达到块大小,则并不实际占用磁盘空间。DN通过心跳(Heartbeat)与NN进行通信,定期向NN报告其存储的数据块列表。客户端读取/写入数据时直接与DN进行通信。

(2)块的冗余备份

    每一块在集群中会存储多份,一个块的所有备份都是同一个ID。如果一个数据块丢失或损坏,可以从其他备份中恢复。

(3)元数据

 NameNode中有两个非常重要的本地文件来保存元数据信息:

  • fsimage:保存了文件系统目录树信息;保存文件与块的对应关系;
  • edits:保存文件系统的更改记录。当客户端进行写操作时,首先记入edits,成功后才会更改内存中数据,而不是直接更改硬盘上的fsimage文件。

    元数据载入:NameNode启动时,通过fsimage读取元数据,载入内存;执行edits中的记录;清空edits,保存最新数据;收集DN汇报的块位置信息。

    元数据更新:NN运行时,记录文件的创建和写操作到edits;更新内存中的元数据;收集DN汇报的块的创建和复制信息。

(4)HDFS追加写的操作流程

  1.     客户端与NN通信,获得文件的写保护锁及文件最后一个块的位置;
  2.     客户端挑选一个DataNode作为主写入点,并对其余节点上该数据块加锁
  3.     依次更新各个DN上的数据,更新时间戳和校验值
  4.     最后一个数据块写满,并且所有备份块都完成写入后,向NN申请下一个数据块。