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

67 阅读3分钟

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

01.HDFS基本介绍

HDFS:Hadoop Distributed File System

认识Hadoop技术体系,理解“计算+存储”的程序应用逻辑

  • 存储层:HDFS
  • 调度层:YARN
  • 计算框架:MapReduce。值得注意的是另外一个同属于Apache基金会的开源计算框架Apache Spark,当前业界的使用已经远超于MapReduce,尽管它不属于Hadoop项目,但是和Hadoop也有紧密关系。

文件系统:单机文件系统非常普遍,从Windows NTFS到Linux的Ext4等,分布式文件系统是单机文件的延伸,概念术语是相通的,比如目录、文件、目录树等。

  • 单机文件系统:常见的如Windows NTFS,Linux的Ext4,虽然不同的操作系统和实现,但是本质都是一样的,解决相同的问题。
  • 分布式文件系统:本质上扩展、延伸了单机文件系统,提供了大容量、高可靠、低成本等功能特性;实现上一般也更为复杂

02.架构原理

2.1 HDFS组件

三大件

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

2.2 Client写流程

1.PNG

  • client询问NameNode写到哪
  • pipeline写

2.3 Client读流程

2.PNG

2.4 元数据节点 NameNode

  • 维护目录树
  • 维护文件和数据块的关系
  • 维护文件块存放节点信息
  • 分配新文件存放节点

2.5 数据节点 DataNode

  • 数据块存取
  • 心跳汇报
    • 把存放在本机的数据块列表发送给NameNode,以便NameNode能维护数据块的位置信息
  • 副本复制
    • 数据写入时Pipeline IO操作
  • 4.PNG

03.关键设计

分布式存储系统基本概念

  • 容错能力
    • 服务器宕机、网络异常、磁盘故障
  • 一致性模型
    • 为了实现容错,数据必须多副本存放
  • 可扩展性
    • 具备横向扩张能力
  • 节点体系
    • 主从模式、对等模式 高可用是必须的功能
  • 数据放置
    • 数据存放的策略
  • 单机存储引擎
    • 如何高效存取硬盘数据

3.1 NameNode 目录树维护

  • 仅在内存中修改:fsimage
  • 需要立即保存到硬盘:EditLog

3.2 NameNode 数据放置

  • 数据块信息维护

    • 一个文件分为固定大小的数据块

    • 维护每个数据块所在的节点信息

  • 数据放置策略

    • 新数据存放到哪些节点
    • 3个副本怎么合理放置

3.3 DataNode

  • 数据块的硬盘存放

    • 文件再NameNode已经分割成block

    • DataNode以block为单位对数据进行存取

  • 启动扫盘

    • DataNode需要知道本机存放了哪些数据块
    • 启动时把本机硬盘上的数据块列表加载在内存中

3.4 HDFS写异常处理

Lease Recovery

  • 文件写了一半,client挂了。可能问题:

    • 副本不一致

    • Lease无法释放

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

3.PNG

Pipeline Recovery

文件写入过程中,DataNode侧出现异常挂掉了

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

3.5 Client读异常处理

  • 读取文件时,DataNode侧出现异常挂掉了

    • 切换节点读
  • 节点半死不过,读取很慢

    • 慢节点检测 - 节点切换

3.6 旁路系统

  • Balancer:均衡DataNode的容量
  • Mover:确保副本放置符合策略要求