HDFS原理与应用 | 青训营笔记

136 阅读3分钟

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

之前看了GFS的论文,感觉HDFS和GFS非常想,一些处理的理念也十分相似。

HDFS结构

  • HDFS组件

    • Client/SDK:读写操作的发起点,HDFS很多读写逻辑都是在SDK中实现的。
    • NameNode:元数据节点,是HDFS的中枢节点,也是服务的入口。(对应GFS的master)
    • DataNode:数据节点,存放实际用户数据。(对应GFS的Chunkserver)
  • 分布式存储系统的基本概念,这些概念基本上每个分布式存储系统都会涉及到。

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

NameNode

目录树维护

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

定期将目录树保存到硬盘上,同时使用Log来记录目录树的修改日志(EditLog)

数据放置

  • 数据块信息维护

    • 目录树保存每个文件的块id
    • NameNode维护了每个数据块所在的节点信息
    • NameNode根据DataNode汇报的信息动态维护位置的信息
    • NameNode不会持久化数据块的位置信息
  • 数据放置策略

    • 数据均衡(在GFS中使用master节点来进行负载均衡)

DataNode

存储以Block为单位(在GFS中即Chunksize)进行存取

每一个节点需要知道本机存放了哪些数据块

启动时把本机硬盘上的数据块加载在内存中

Lease Recovery

问题:在写过程中mclient自己挂了

可能副本不一致,lease无法释放

image.png

和GFS中租约是一样的,对每个文件master管理租约,租约可以是一个有时间限制的锁

HDFS写异常

问题:文件写入,有DataNode出现问题

GFS中的解决方案:利用租约以及控制流和数据流分离,对副本划分primary和secondarys,对不同的节点出现问题的情况进行重试,或者回退。

GFS问题中提出的问题值得注意:为了加速,client中请求master中的信息后,会缓存在自己的内存中,这时候就这涉及到了对master中的记录和client中之前请求的内容出现不一致的情况

HDFS读

读文件过程中,出现DataNode异常——有多个副本,进行切换

旁路系统

Balancer

负载均衡,使得各个DataNode节点存储使用尽量均衡

同时均衡还包括每个节点的IO均衡,带宽等多个系统

Mover

数据放置策略——为了可靠性需要有数据分散的副本,分布在不同的机架上

控制面建设:保障系统稳定运行

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