Hadoop之HDFS重点架构原理简介

Hadoop之HDFS(Hadoop Distributed File System)的重点架构原理主要涉及其分布式文件系统的核心组件、数据存储机制、以及关键的数据读写流程。以下是对HDFS重点架构原理的详细解析:

一、HDFS的核心组件

HDFS采用主从架构(Master/Slave),主要包括以下几个核心组件:

  1. NameNode(主节点)

    • 角色:HDFS中的管理者,负责管理文件系统的命名空间和客户端对文件的访问。
    • 功能
      • 存储和管理文件系统的元数据,包括文件信息、文件被分割成具体block块的信息、以及每一个block块归属的DataNode的信息。
      • 处理客户端的读写请求。
      • 配置副本策略。
      • 管理HDFS的名称空间,保存整个文件系统的目录信息、文件信息及分块信息。
    • 元数据管理:NameNode主要通过fsimage(命名空间镜像文件)和editslog(编辑日志)两个组件实现元数据管理。随着操作HDFS的数据变多,edits文件会变得很大,影响NameNode的重启速度,因此SecondaryNameNode会辅助NameNode定期合并fsimage和editslog。
  2. SecondaryNameNode(辅助节点)

    • 角色:辅助NameNode进行元数据的定期检查点,并在紧急情况下帮助NameNode恢复元数据。
    • 功能
      • 定期从NameNode上获取fsimage和edits进行合并,然后将合并后的fsimage推送给NameNode。
      • 减少NameNode的工作量,提高系统的稳定性和恢复能力。
  3. DataNode(从节点)

    • 角色:HDFS中的存储节点,负责存储Client发来的数据块block。
    • 功能
      • 管理节点上它们拥有的存储,将存储划分为多个block块,管理block块信息。
      • 周期性地将其所有的block块信息发送给NameNode。
      • 执行数据块的读写操作。
  4. Client(客户端)

    • 角色:操作HDFS的客户端。
    • 功能
      • 与NameNode交互,获取文件的位置信息。
      • 与DataNode交互,读取或写入数据块。
      • 文件上传HDFS时,客户端将文件切分成多个block,然后上传。

二、数据存储机制

  1. 分块存储

    • HDFS中的文件在物理上是分块存储的,每个数据块默认为128MB(但可配置为不同大小)。
    • 数据块是HDFS的基本存储单元,它们被分布在多个数据节点上,以实现高可用性和并行读写。
  2. 副本机制

    • 每个数据块默认会有3个副本,以提高数据的可靠性和容错能力。
    • 副本的存储策略遵循一定的规则,如第一个副本放在上传文件的DataNode上,第二个副本放在不同机架的节点上,第三个副本放在与第二个副本相同机架的随机节点上。

三、数据读写流程

  1. 写文件流程

    • 客户端向NameNode发起文件写入的请求。
    • NameNode根据文件大小和文件块配置情况,返回给客户端它所管理部分DataNode的信息。
    • 客户端将文件划分为多个block块,并根据DataNode的地址信息,按顺序写入到每一个DataNode块中。
    • 数据以packet为单位(默认为64KB)在DataNode之间流式传输,形成pipeline。
    • 当一个block传输完成后,客户端继续传输下一个block,直到文件传输完成。
  2. 读文件流程

    • 客户端向NameNode请求文件的元数据信息,以确定文件的位置。
    • NameNode返回具有该文件所有副本的DataNode位置地址列表(按网络拓扑距离排序)。
    • 客户端从最近的DataNode读取数据块,并在读取完一个数据块后,继续从下一个最近的DataNode读取下一个数据块。
    • 当文件读取完成后,客户端关闭与DataNode的连接。

综上所述,HDFS通过其分布式的主从架构、分块存储和副本机制、以及高效的数据读写流程,实现了对海量数据的高效、可靠、可扩展的存储和管理。

相关推荐

  1. HadoopHDFS重点架构原理简介

    2024-07-11 09:32:03       23 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-11 09:32:03       66 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-11 09:32:03       70 阅读
  3. 在Django里面运行非项目文件

    2024-07-11 09:32:03       57 阅读
  4. Python语言-面向对象

    2024-07-11 09:32:03       68 阅读

热门阅读

  1. Spark SQL----ALTER DATABASE

    2024-07-11 09:32:03       20 阅读
  2. SpringBoot3+Redis实现分布式锁

    2024-07-11 09:32:03       18 阅读
  3. 五种常见排序算法

    2024-07-11 09:32:03       19 阅读
  4. uniapp 防止重复提交数据

    2024-07-11 09:32:03       21 阅读
  5. 通过实例说明.NET Autofac依赖注入的多种方式

    2024-07-11 09:32:03       22 阅读
  6. .NET 9 预览版 5 发布

    2024-07-11 09:32:03       26 阅读
  7. 【Android12】第三方APP开机自启

    2024-07-11 09:32:03       24 阅读
  8. 深入理解CSS中的透明效果实现

    2024-07-11 09:32:03       17 阅读
  9. mac查看31295端口被占

    2024-07-11 09:32:03       21 阅读
  10. 简述框架和函数库的区别

    2024-07-11 09:32:03       22 阅读
  11. WPF自定义模板--ToggleButton

    2024-07-11 09:32:03       21 阅读
  12. pc安装python opencv

    2024-07-11 09:32:03       19 阅读
  13. Linux关于数据库,群集,缓存加速等精捡面试题

    2024-07-11 09:32:03       18 阅读