HDFS应用和设计|青训营笔记

62 阅读2分钟

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

HDFS原理与应用

课程目标

  • HDFS设计与实现
  • HDFS的应用场景
  • 分布式存储系统的概念

文件系统

单机文件系统很常见的就是Windows,Linux.

分布式文件系统:

  • 高可靠:有多个副本进行存储,一个挂掉了还有其他机器顶替
  • 大容量:因为是分布式的可以用更多的机器作为存储介质
  • 低成本:多个机器可以是廉价的机器

Screen Shot 2022-08-04 at 8.20.58 AM.png

HDFS功能特性

  • 分布式
  • 容错能力
  • 高可用、高吞吐
  • 可拓展、廉价

HDFS的演示

使用hdfs开头的命令就是在远程的机器上进行文件系统的操作

Screen Shot 2022-08-04 at 8.39.26 AM.png

HDFS框架

Client,NameNode,DataNode

CLient写入流程

  1. Client并不知道需要写到哪一个DataNode中,询问`NameNode``
  2. `NameNode返回说可以写到哪个DataNode
  3. 写入到副本中

Screen Shot 2022-08-04 at 8.43.39 AM.png

CLient读流程

  • 询问那么node需要读取哪个datanode
  • 返回目标副本
  • 读取

数据节点DataNode

  • 数据块的存取
  • 心跳回报: 将存放在本机上的数据块列表的信息发送给NameNode
  • 副本存储

关键设计

目录树的维护

  • 完整的放在内存中
  • 定时放到硬盘上面
  • 文件系统目录树:文件系统的设计类似于一颗树
  • 日志的实现:类似于redoLog, undoLog进行维护

数据块信息的维护

启动的时候通过datanode进行汇报,告诉namenode说我这里的节点的信息,namenode再从内存中进行存储datanode 的位置信息

数据的放置的策略

放置的时候尽可能的进行均衡的放置

DataNode

文件存放在namenode的时候分割成为block,以block为单位对数据进行存取

启动的时候需要进行扫盘,明确本机存放了哪些数据块,将metadata存放在内存中

HDFS写异常处理

假设文件写了一半,client挂掉了可能会产生副本不一致等情况。

租约: 其实就相当于通过NameNode上了一把锁,拿到这把锁就可进行操作