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

133 阅读3分钟

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

这是我参与「第四届青训营 -大数据场」笔记创作活动的第12天

三、HDFS关键设计

1. 分布式存储系统基本概念

  • 容错能力:能处理绝大部分异常场景
  • 一致性模型:为了实现容错,数据必须多副本存放,解决的问题是如何保证其一致性
  • 可扩展性:分布式存储系统需要具备横向扩张scale-out的能力
  • 节点体系:常见的有主从模式、对等模式等、不管哪种模式,高可用是必须的功能
  • 数据放置:系统实由多个节点组成,数据是多个副本存放是,需要考虑数据存放的策略
  • 单机存储引擎:在绝大部分存储系统中,数据都是需要落盘持久化,单机引擎需要解决的事根据系统特点,如何高效存取硬盘数据

2. NameNode目录树设计

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

3. NameNode数据放置

3.1 数据块信息维护
  • 目录树保存每个文件的块id、
  • NameNode维护了每个数据块所在的节点信息、
  • NameNode根据DataNode汇报的信息动态维护位置信息
  • NameNode不会持久化数据块位置信息
3.2 数据块放置策略
  • 新数据存放到哪个节点
  • 数据均衡需要怎么合理搬迁数据
  • 3个副本怎么合理放置

4. DataNode设计

4.1 数据块磁盘存放
  • 文件在NameNode已分割成block
  • DataNode以block为单位对数据进行存取
4.2 启动扫盘
  • DataNode需要知道本机存放了那些数据块
  • 启动时把本机硬盘上的数据块列表加载在内存中

5. HDFS写异常处理

5.1 Lease Recovery
  • 情景:文件写了一半,client自己挂掉了。
  • 可能产生的问题:副本不一致、Lease无法释放
  • 租约:Client 要修改一个文件时,需要通过NameNode上锁,这个锁就是租约(Lease)。
  • 解决方法:Lease Recovery

image.png

5.2 Pipeline Recovery
  • 情景:文件写入过程中,DataNode侧出现异常挂掉了
  • 异常出现的时机:创建连接时(Pipeline重新选择)、数据传输时(Pipeline重新构建)、complete阶段(Pipeline重新衔接、构建)
  • 解决方法:Pipeline Recovery

image.png

6. Client读异常处理

  • 情景:读取文件的过程,Dataode侧出现异常挂掉了
  • 解决方法:节点Failover
  • 增强情景:半死不活,读取很慢怎么办,对其进行优化切换

image.png

7. HDFS旁路系统

  • Balancer:均衡DataNode的容量

image.png

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

image.png

8. HDFS控制面建设

  • HouseKeeping组件:比如Balancer,Mover等, 这些组件不运行不会马上影响读写操作,但是长时间会积累系统性问题,例如读写不均衡导致IO热点等。

  • 可观测性设施:

    • 指标埋点
    • 数据采集
    • 访问日志
    • 数据分析
  • 运维体系建设:

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

四、HDFS应用场景

  • 大数据技术中的应用

    • HDFS在大数据技术体系中的角色

    • 演示:PySpark读取分析HDFS上的文件

      • 数据如何产生
      • 数据如何读取
      • 数据如何保存
    • ETL:数据如何产生、传输

    • OLAP:如何高效地读取分析数据

  • 存储底座

    • HBase
    • 机器学习
    • 通用场景