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

100 阅读2分钟

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

HDFS基本介绍

1.hadoop 技术体系

Snipaste_2022-07-31_14-54-30.jpg

2.分布式文件系统

  • 大容量 更多的机器和存储介质
  • 高可靠 多个副本提高容错能力
  • 低成本 不需要高端软件来扩容

Snipaste_2022-07-31_14-57-28.jpg

3.分布式存储系统

Snipaste_2022-07-31_14-58-04.jpg

4.HDFS功能特性

  1. 分布式
  2. 容错
  3. 高可用
  4. 高吞吐
  5. 可扩展
  6. 廉价

架构原理

1.HDFS组件

Snipaste_2022-07-31_15-00-42.jpg

  • Client/SDK
  • NameNode
  • DataNode

2. Client写流程

Snipaste_2022-07-31_15-01-30.jpg

3.Client读流程

Snipaste_2022-07-31_15-02-59.jpg

4.NameNode元数据节点

作用

  1. 维护目录树
  2. 维护文件和数据块的关系
  3. 维护文件快存放节点信息
  4. 分配新文件存放节点

5.DataNode数据节点

  1. 数据块存取
  2. 心跳汇报
  3. 副本复制

Snipaste_2022-07-31_15-07-37.jpg

关键设计

分布式存储系统基本概念

  1. 容错能力 能处理绝大部分异常场景,如服务器宕机、网络异常、磁盘故障等
  2. 一致性模型 为了实现容错,数据必须多副本存放,一致性要解决的问题是如何保证多个副本的内容一致
  3. 可扩展性 分布式存储系统需要具备横向扩张scale-out的能力
  4. 节点体系 主从模式、对等模式
  5. 数据防止 需要考虑数据存放的策略
  6. 单机存储引擎 在绝大部分分布式存储系统,数据都是需要落盘持久化,单机引擎需要系统特点,高效存取硬盘数据

1.NameNode目录维护

fsimage

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

Snipaste_2022-07-31_15-52-33.jpg

EditLog

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

Snipaste_2022-07-31_15-52-43.jpg

2.NameNode数据放置

数据块信息维护

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

数据放置策略

  • 数据会存放在不同机器节点

Snipaste_2022-07-31_15-56-29.jpg

3.DataNode

数据块的硬盘存放

  • 文件在NameNode已分割成block
  • DataNode以block为单位进行存取

启动扫盘

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

应用场景

大数据生态

Snipaste_2022-07-31_15-59-41.jpg

OLAP查询引擎

Snipaste_2022-07-31_16-00-54.jpg

机器学习

  • Tensorflow 原生支持HDFS读写
  • Pytorch 通过Alluxio访问HDFS 修改源码增加对HDFS的支持

通用存储应用

Snipaste_2022-07-31_16-00-26.jpg