概述

介绍如下内容:

  • 什么是HDFS
  • HDFS的特性
  • HDFS的应用场景
  • HDFS在Hadoop产品中的位置
  • HDFS系统架构
    • HDFS数据读取流程
    • HDFS数据写入流程

什么是HDFS

HDFS是基于Google发布的GFS论文设计开发的分布式文件系统。

HDFS的特性

HDFS除了具有分布式文件系统之间相同的特性以外,还有如下特性:

  • 高容错性:认为硬件总是不可靠的,默认一个文件会有三个副本。
  • 高吞吐量:为大量的数据访问应用提供高吞吐量支持。
  • 大文件存储:支持TB-PB级别文件的存储。
  • 适合大文件的存储与流式访问。
  • 不适合大量的小文件存储、随机写入和低延迟读取。

HDFS的应用场景

达到TB-PB级别的存储以及不会对数据进行过多的修改。

  • 网站用户行为数据存储
  • 生态系统数据存储
  • 气象数据存储

HDFS在Hadoop产品中的位置

图片加载失败HDFS在Hadoop产品中的位置

HDFS系统架构

图片加载失败HDFS系统架构

  • Client:负责对外界请求进行响应。
  • DataNode:用于存储具体的数据。
  • NameNode:存储文件的元数据,包括文件的大小,修改时间等。长期存储在内存中,并且在一个HDFS集群中只会有一个活跃的NameNodeNameNode会有定期的落盘操作。
  • Block:数据块,存储上限为128MB。
  • XXX ops:XXX的心跳信号,用于检测一个节点或者某一个部分是否正常工作。

HDFS数据读取流程

图片加载失败HDFS数据读取流程

  1. ClientDistributed FileSystem调用OpenAPI获取要读取的文件的元数据
  2. ClientFSData OutputStream调用ReadAPI。
  3. FSData OutputStream进行数据读取
  4. 等待所有数据写入完毕后统一向FSData OutputStream进行答复。
  5. ClientFSData OutputStream调用CloseAPI将所有的对外连接关闭。

HDFS数据写入流程

图片加载失败HDFS数据写入流程

  1. ClientDistributed FileSystem调用CreateAPI。
  2. Distributed FileSystemNameNode上发起一个Create请求创建在NameNode中创建一个新的节点。
  3. ClientFSData OutputStream调用WriteAPI。
  4. FSData OutputStream以数据包的形式将数据写入到DataNode中(三个副本都要写)。
  5. 等待所有数据写入完毕后统一向FSData OutputStream进行答复。
  6. ClientFSData OutputStream调用CloseAPI将所有的对外连接关闭。
  7. 补充完成NameNode中的数据。

从读写流程可以看出为什么HDFS不适合大量的小文件存储。因为大量的小文件会产生大量的Block,也就会产生大量的元数据,这些元数据会占用宝贵的内存,当内存不足的时候NameNode节点将无法正常工作。