Hadoop三大组件之HDFS(一)

时间:2024-09-30 21:46:55

HDFS 简介

HDFS (Hadoop Distributed File System) 是一个分布式文件系统,用于存储文件,采用目录树结构来定位文件。它由多个服务器组成,每个服务器在集群中扮演不同的角色。

  • 适合一次写入,多次读取的场景
  • 文件创建、写入和关闭后,通常不再修改。

1. HDFS的架构

HDFS(Hadoop Distributed File System)采用主从架构,由一个NameNode(主节点)和多个DataNode(从节点)组成。NameNode负责管理HDFS命名空间和数据块映射信息(如文件名、文件目录层次结构、权限、块位置等)并配置副本策略,而DataNode负责存储实际的数据块。Secondary NameNode辅助NameNode进行元数据的检查点操作。

1. NameNode (主节点)
  • 角色:HDFS 的管理者和控制中心。
  • 功能
    • 管理 HDFS 的名称空间,维护文件和目录的结构。
    • 配置和管理副本策略,确定每个文件的副本数量和存放位置。
    • 管理数据块(Block)的信息,例如数据块的位置和状态。
    • 处理客户端的读写请求,协调文件的存储和访问。
2. DataNode (节点)
  • 角色:HDFS 的工作节点,执行实际的数据存储和处理。
  • 功能
    • 存储实际的数据块,负责数据的持久化。
    • 执行数据块的读写操作,根据 NameNode 的指令进行数据的管理。
3. Client (客户端)
  • 角色:与 HDFS 交互的用户或应用程序。
  • 功能
    • 在将文件上传到 HDFS 时,将文件切分为多个数据块。
    • 与 NameNode 交互,以获取文件的位置信息。
    • 与 DataNode 交互以进行数据的读写操作。
    • 提供命令和工具用于管理 HDFS,例如格式化 NameNode。
    • 执行对 HDFS 的增、删、改等操作。
4. Secondary NameNode (辅助 NameNode)
  • 角色:辅助 NameNode,提供一定的冗余和备份。
  • 功能
    • 定期合并 Fsimage 和 Edits 文件,从而减轻 NameNode 的负担。
    • 在紧急情况下(如 NameNode 故障)可以辅助恢复 NameNode 的状态,但并非其直接替代。

在这里插入图片描述

2. HDFS的读写流程

2.1 写流程

  1. 客户端向NameNode发起写请求,提供文件名和大小等信息。
  2. NameNode将文件划分为数据块,记录副本位置并返回给客户端。
  3. 客户端根据位置信息,将数据块发送给对应的DataNode。
  4. DataNode接收数据块后,将其存储到本地磁盘。
  5. 在写入时,DataNode先写入临时文件,完成后转为永久文件。
  6. DataNode定期向NameNode报告数据块信息。

在这里插入图片描述

2.2 读流程

  1. 客户端访问NameNode,查询元数据,获得数据块位置列表。
  2. 选择就近的DataNode服务器,建立输入流请求。
  3. DataNode向输入流中写数据,以packet校验。
  4. 关闭输入流。

在这里插入图片描述

3. HDFS的优缺点

3.1 优点

  • 高容错:数据块复制存储,节点故障时自动恢复。
  • 高吞吐:并行处理数据块,高效读写和批处理。
  • 适合大文件:将大文件分块存储,适合大规模数据处理。
  • 廉价机器构建:可以构建在廉价的机器上,有多副本机制提升其可靠性。

3.2 缺点

  • 延迟高:不适合低延时数据访问。
  • 不支持并发写入:一个文件只能有一个写入进程,不允许多个线程同时写。
  • 仅支持随机修改:仅支持数据追加,不支持文件的随机修改。
  • 小文件存储不高效:浪费存储空间和元数据开销。

使用场景:大规模数据存储和计算、日志分析。

4. HDFS默认存储块大小

HDFS默认块大小为128MB(2.x版本后),基于最佳传输损耗理论。文件块越大,寻址时间越短,但磁盘的传输时间越长。在一次传输中,寻址时间占用总传输时间的1%时,传输效率最佳。

切分规则:

第一片:0-128M,第二片:128-256M,第三片:256-300M每次切片的时候,都要判断切完剩下的部分是否大于块的1.1倍,大于时候,继续按照规定切块,小于1.1倍时候,将剩下的文件大小归到一个切片上去

5. HDFS的心跳机制

DataNode每隔3秒向NameNode发送心跳信号,报告状态和存储信息。如10分钟未收到心跳信号,NameNode认为节点不可用,并重新分配数据块副本。

6. HDFS的负载均衡

HDFS的负载均衡机制确保数据在DataNode上的分布均匀。当DataNode存储利用率过高时,系统自动将数据迁移至空闲的DataNode。通过手动命令或配置参数调整负载均衡策略。

7. Secondary NameNode

Secondary NameNode辅助NameNode进行元数据的检查点操作。定期从NameNode获取fsimage和edits文件,合并生成新的fsimage文件,发送回NameNode,以减小edits文件大小,防止NameNode重启时加载过多日志。

8. HDFS 的机架感知

在 HDFS 中,通过机架感知来配置副本存放策略,不仅提高了数据访问的效率,还增强了系统的容错能力和数据的安全性。这种策略适合大规模分布式文件系统,有效应对数据丢失和访问延迟问题。具体如下:

副本存放策略
  1. 第一副本:存放在本机(即客户端请求的节点)。
  2. 第二副本:存放在同机架内的其他服务器节点。
  3. 第三副本:存放在不同机架的一个服务器节点上。
好处
  1. 提高访问速度:如果本机的数据损坏或丢失,客户端可以快速从同机架的相邻节点获取数据,访问速度明显快于跨机架访问。

  2. 增强数据安全性:如果本机所在的机架出现问题,由于副本分散存储在不同机架内,确保数据不会因单一机架故障而丢失,客户端仍能访问到数据。