Skip to content
作者:daily5am创建:-更新:-
字数:预计阅读: 分钟访问量:--

HDFS原理和架构

AI生成声明: 本文档由AI辅助生成,旨在提供HDFS原理和架构的完整指南。

HDFS是Hadoop的分布式文件系统,理解其原理和架构对于掌握大数据存储至关重要。

核心问题

HDFS设计目标

  1. 容错性

    • 硬件故障是常态
    • 自动检测和恢复
    • 数据副本机制
  2. 流式数据访问

    • 适合一次写入多次读取
    • 高吞吐量
    • 不适合低延迟访问
  3. 大数据集

    • 支持大文件
    • 支持大量文件
    • 扩展到数百个节点

架构组件

  1. NameNode(主节点)

    • 管理文件系统命名空间
    • 存储元数据(fsimage + edits)
    • 控制客户端访问
  2. DataNode(从节点)

    • 存储实际数据块
    • 定期向NameNode报告
    • 执行数据块的创建、删除、复制
  3. SecondaryNameNode

    • 辅助NameNode
    • 定期合并fsimage和edits
    • 非高可用方案

数据存储机制

块(Block)

  • 默认大小:128MB(Hadoop 2.x)
  • 为什么大块:减少寻址开销
  • 块抽象:简化存储管理

副本机制

  • 默认副本数:3
  • 副本放置策略
    • 第一个副本:本地机架
    • 第二个副本:不同机架
    • 第三个副本:同第二个副本的机架

机架感知

  • 目的:优化网络带宽使用
  • 策略:优先同机架,跨机架备份
  • 配置:通过脚本配置机架信息

读写流程

写流程

  1. 客户端向NameNode请求写入
  2. NameNode检查权限和空间
  3. NameNode返回DataNode列表
  4. 客户端写入数据到DataNode
  5. DataNode之间复制数据
  6. 客户端确认写入完成

读流程

  1. 客户端向NameNode请求读取
  2. NameNode返回数据块位置
  3. 客户端从最近的DataNode读取
  4. 如果读取失败,尝试其他副本

高可用(HA)

NameNode HA

方案:

  • Active NameNode:处理请求
  • Standby NameNode:同步元数据
  • Zookeeper:故障检测和切换
  • JournalNode:共享存储

故障转移:

  • 自动检测故障
  • 自动切换到Standby
  • 保证服务不中断

常见面试题

  1. HDFS为什么不适合小文件?

    • 元数据占用内存大
    • 寻址开销大
    • 建议合并小文件
  2. HDFS的副本放置策略?

    • 第一个副本:本地机架
    • 第二个副本:不同机架
    • 第三个副本:同第二个副本的机架
  3. NameNode的元数据存储?

    • fsimage:文件系统镜像
    • edits:操作日志
    • 定期合并