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

122 阅读4分钟

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

课程目录

1.HDFS基本介绍

2.架构原理

3.关键设计

4.应用场景

1.HDFS基本介绍

HDFS:Hadoop Distributed File System

1.1 Windows单机文件系统

image.png

1.2 Linux单机文件系统

image.png

1.3 分布式文件系统

  • 大容量
  • 高可靠
  • 低成本

1.4 分布式存储系统

  • 对象存储
  • 文件系统
  • 块存储
  • 数据库

1.5 HDFS功能特性

  • 分布式
  • 容错
  • 高可用
  • 高吞吐
  • 可扩展
  • 廉价

1.6 演示环境-HDFS节点

1.小结

  • Hadoop技术体系
  • 分布式文件系统
  • 分布式存储系统的类型
  • HDFS功能特性
  • 演示环境

2.架构原理

2.1 HDFS组件

image.png

2.2 Client写流程

image.png

2.3 Client读流程

image.png

2.4 源数据节点 NameNode

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

image.png

2.5 数据节点 DataNode

  • 数据块存取
  • 心跳汇报
  • 副本复制

image.png

2.小结

  • 分布式存储系统的基本概念
  • HDFS组件功能职责

3.关键设计

分布式存储系统基本概念

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

3.1 NameNode目录树维护

fsimage

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

image.png

EditLog

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

image.png

3.2 NameNode数据放置

数据块信息维护

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

image.png

数据放置策略

  • 新数据存放到哪些节点
  • 数据均衡需要怎么合理搬迁数据
  • 3个副本怎么合理放置

image.png

3.3 DataNode

数据块的硬盘存放

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

启动扫盘

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

3.4 HDFS写异常处理:Lease Recovery

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

  • 情景:文件写了一半,client自己挂掉了。可能产生的问题:

  • 副本不一致
  • Lease无法释放
  • 解决方法:Lease Recovery

image.png

3.4 HDFS写异常处理:Pipeline Recovery

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

  • 异常出现的时机:

  • 创建连接时
  • 数据传输时
  • complete阶段
  • 解决方法:Pipeline Recovery

image.png

3.5 Client读异常处理

  • 情景:读取文件的过程,DataNode侧出现异常挂掉了

  • 解决方法:节点Failover

  • 增强情景:节点半死不活,读取很慢

image.png

3.6 旁路系统

  • Balancer:均衡DataNode的容量

image.png

  • Mover:确保副本放置符合策略要求

image.png

3.7 控制面建设

可观测性设施

  • 指标埋点
  • 数据采集
  • 访问日志
  • 数据分析

运维体系建设

  • 运维操作需要平台化
  • NameNode操作复杂
  • DataNode机器规模庞大
  • 组件控制面API

3.小结

  • NameNode目录树设计
  • NameNode副本放置
  • DataNode设计
  • Client读写流程异常处理
  • HDFS旁路系统
  • HDFS控制面建设

4.应用场景

4.1 使用HDFS的公司

image.png

4.2 初窥大数据生态

image.png

4.3 演示:PySpark读写HDFS文件

  • 读取本地文件系上文件
  • 把查询结果保存到本地文件
  • 读取HDFS上的文件
  • 把查询结果保存到HDFS上

4.4 ETL:Extract,Transform,Load

image.png

4.5 OLAP查询引擎

image.png

4.6 HBase

image.png

4.7 机器学习

  • TensorFlow

  • 原生支持HDFS读写
  • PyTorch

  • 通过Alluxio访问HDFS
  • 修改源码增加对HDFS的支持

4.8 通用存储应用

  • 对象存储
  • 消息队列
  • 冷数据层
  • 海量日志
  • 备份数据

4.小结

  • PySpark读写HDFS演示
  • ETL概念
  • OLAP查询引擎
  • 通用存储场景

本次课程个人总结

HDFS原理与应用.jpg