HDFS原理 | 青训营笔记

65 阅读2分钟

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

以下是我对于HDFS原理相关的知识摘录,不涉及课程中的应用部分。

HDFS

学习重点:了解概念应用场景

建议:从事分布式系统:lab(MIT 6.824)、参与开源社区

基本介绍

  • 应用层:MapReduce、Spark(其不属于HDFS子项目,但很多功能依赖于Hadoop)
  • 调度层:YARN
  • 存储层:HDFS

分布式存储系统大致分为以下几类:

image.png

架构

三大件概览

image.png

Client写流程

image.png

读流程

image.png

NameNode在其中起中枢作用(维护目录树、文件切块等等) DateNode 确保数据在硬盘上的高效存取

从特性看关键设计

总特性

容错能力(服务器宕机、网络异常等异常场景,我的理解是一个节点错了不应该导致整个系统崩溃)---> 一致性模型(为了实现容错,数据必须留有多个副本,要保证副本的一致性)-->数据存放策略--> 节点体系(主从模式、对等模式等,要保证高可用性)

其他:

  • 可扩展性(我的理解:允许更多结点(client加入))
  • 单机存储引擎中 高效存储硬盘数据

NameNode目录树维护

fsimage(文件系统目录树)

完整存放于内存,修改时只修改内存中的目录树;定时存放到硬盘上。

EditLog(目录树修改日志,为了防止上述结点挂掉后出现问题)

只有持久化到EditLog才能更新成功

Q:Editlog存放在哪里?

A:可存放在本地文件系统或专用系统

Q:如何实现EditLog共享?

A:详见NameNode HA方案

NameNode 数据放置

数据块信息维护

注:文件在NameNode中已分割成block

  • 目录树保存每个文件的块id
  • NameNode不会持久化数据块位置信息,而是维护其节点信息,并根据DataNode汇报的信息动态维护位置信息。

数据放置策略

image.png

选第二个

DataNode

  • DataNode以block为单位对数据进行存取(硬盘存放)
  • 它需要知道本机存放了哪些数据块,并在启动时把本机硬盘上的数据块列表加载到内存中(启动扫盘)

HDFS写异常处理

  • Q:文件写入过程中client挂掉了会有什么后果?

    A: 副本不一致;锁(lease,直译为租约,但功能与锁相近)无法释放

    S:lease recovery

  • Q:文件写入过程中DataNode出现异常挂了会是什么原因?

    A:异常出现时机:

    创建连接时;数据传输;complete阶段

    S:pipeline recovery

  • 类似:文件读取时DataNode挂了

    A:结点failover

旁路系统

image.png

控制面建设

image.png