HDFS 原理|青训营笔记

125 阅读2分钟

这是我参与「第四届青训营 」笔记创作活动的第12天

今天带来的是HDFS原理,这2天因为去医院检查身体去了,几篇文章就一块发了,进入医院的瞬间突然就感觉自己老了,虽然我才20多岁,如果不舒服要及时检查,好了废话少说继续更新文章

HDFS概述

HDFS集群分为两大角色:NameNode、DataNode (Secondary Namenode)

NameNode负责管理整个文件系统的元数据(整个hdfs文件系统的目录树和每个文件的block信息)

DataNode 负责管理用户的文件数据块

文件会按照固定的大小(blocksize)切成若干块后分布式存储在若干台datanode上

每一个文件块可以有多个副本,并存放在不同的datanode上

Datanode会定期向Namenode汇报自身所保存的文件block信息,而namenode则会负责保持文件的副本数量

HDFS的内部工作机制对客户端保持透明,客户端请求访问HDFS都是通过向namenode申请来进行

架构原理

  • 分布式存储系统的基本概念,这些概念基本上每个分布式存储系统都会涉及到。

    • 容错能力
    • 一致性模型
    • 可扩展性
    • 节点体系模式
    • 数据放置策略
    • 单机存储引擎
  • HDFS组件

    • Client/SDK:读写操作的发起点,HDFS很多读写逻辑都是在SDK中实现的。
    • NameNode:元数据节点,是HDFS的中枢节点,也是服务的入口。
    • DataNode:数据节点,存放实际用户数据。

关键设计

  • NameNode目录树设计,重点理解EditLog的设计,可类比关系型数据库中的Transaction Log概念。

    • 仅在内存中修改:fsimage
    • 需要立即保存到硬盘:EditLog
  • NameNode数据放置:数据分散在各个节点上,如何定位找到它们?

    • 文件和数据块的映射关系
    • 数据块的放置分布策略
  • DataNode设计:数据如何落盘存放?

    • 数据块路径
    • 启动扫盘获得本机文件块列表
  • Client读写链路的异常处理

    • Server端异常
    • Client端异常
    • 慢节点
  • 控制面建设:保障系统稳定运行

    • HouseKeeping组件:比如Balancer,Mover等, 这些组件不运行不会马上影响读写操作,但是长时间会积累系统性问题,例如读写不均衡导致IO热点等。
    • 可观测性设施:比如系统指标监控设施等,帮助快速发现定位问题。
    • 运维体系建设:从最基本的命令行手工操作,脚本自动化再到完善的运维平台。