HDFS关键设计| 青训营笔记

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

关键设计

分布式存储系统的基本概念

  • 容错能力:能够处理绝大部分异常场景,例如服务器宕机、网络异常、磁盘故障、网络超时等。
  • 一致性模型:为了实现容错,数据必须多副本存放,一致性要解决的问题是如何保障这多个副本的内容都是一致的
  • 可扩展性:分布式存储系统需要具备横向扩张scale-out的能力
  • 节点体系:常见的有主从模式、对等模式等,不管哪种模式,高可用是必须的功能。
  • 数据放置:系统是由多个节点组成,数据是多个副本存放时,需要考虑数据存放的策略。
  • 单机存储引擎:在绝大部分存储系统中,数据都是需要落盘持久化,单机引擎需要解决的是根据系统特点,如何高效得存取硬盘数据。

NameNode目录树的维护

image-20220812111528173

image-20220812112234512

  • fsimage

    • 文件系统目录树
    • 完整的存放在内存中
    • 定时存放到硬盘上
    • 修改是只会修改内存中的目录树
  • EditLog

    • 目录树的修改日志
    • client更新目录树需要持久化EditLog后才能表示更新成功
    • EditLog可存放在本地文件系统,也可存放在专用系统上
    • NameNode HA方案一个关键点就是如何实现EditLog共享

HDFS写异常处理:Lease Recovery

image-20220812150156743

  • 租约:Client要修改一个文件时,需要通过NameNode 上锁,这个锁就是租约(Lease)。

  • 情景:当文件写了一半,client自己挂掉了。可能产生的问题:

    • 副本不一致(导致每次不同的副本读出来的数据不一致)
    • Lease无法释放(租约需要定期刷新,但无法释放之后会出现无法修改的情况)
  • 解决方法:Lease Recovery

HDFS写异常处理:Pipeline Recovery

image-20220812150057089

  • 情景:文件写入过程中,DataNode侧出现异常挂掉了。

  • 异常出现的时机:

    • 创建连接时(重新选一个连接)
    • 数据传输时(重新构建节点)
    • complete阶段(Pipeline 重新连接)
  • 解决办法:Pipeline Recovery

Client读异常处理

image-20220812152444582

  • 情景:读取文件的过程,DataNode侧出现异常挂掉了
  • 解决办法:节点Failover
  • 增强情景:节点半死不过,读取很慢

旁路系统

控制面切换

  • 可观测性措施

    • 指标埋点
    • 数据采集
    • 访问日志
    • 数据分析
  • 运维体系建设

    • 运维操作需要平台化
    • NameNode操作复杂
    • DataNode机器规模庞大
    • 组件控制面API
posted @ 2022-08-15 15:23  Luciferpluto  阅读(1)  评论(0)    收藏  举报  来源