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

91 阅读3分钟

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

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

分布式存储

  • High Availability: 高可用
  • Throughput: 吞吐量
  • Scale Out: 水平扩展
  • Scale Up:纵向扩展
  • Fault-Tolerance: 容错
  • Erasure Coding/EC: 纠删码

HDFS基础介绍

HDFS:Hadoop Distributed File System

1.1 Windows单机文件系统

image.png

1.2 Linux单机文件系统

image.png 包括:BTRFS、ZFS、XFS、EXT4等100种文件系统

1.3 分布式文件系统

分布式文件系统是单机文件系统的一种延伸,可以解决单价文件系统所不能的问题 image.png

根据存储不同可以分为以下几类:

image.png

HDFS功能介绍

  1. 分布式:
  • 受GFS启发,用Java实现的开源系统,没有实现完整的POSIX文件系统语义
  1. 容错:
  • 自动处理、规避多种错误场景,例如常见的网络错误、机器宕机等
  1. 高可用:
  • 一主多备模式实现元数据高可用,数据多副本实现用户数据的高可用
  1. 高吞吐:
  • Client直接从DataNode读取用户数据,服务端支持海量client并发读写
  1. 可扩展:
  • 支持联邦集群模式,DataNode数量可达10w级别
  1. 廉价:
  • 只需要通用硬件,不需要定制高端的昂贵硬件设备

架构原理

  • HDFS组件

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

关键设计

  • NameNode目录树设计,重点理解EditLog的设计,可类比关系型数据库中的Transaction Log概念。

    • 仅在内存中修改:fsimage
    • 需要立即保存到硬盘:EditLog
  • NameNode数据放置:数据分散在各个节点上,如何定位找到它们?

    • 文件和数据块的映射关系
    • 数据块的放置分布策略
  • DataNode设计:数据如何落盘存放?

    • 数据块路径
    • 启动扫盘获得本机文件块列表
  • Client读写链路的异常处理

    • Server端异常
    • Client端异常
    • 慢节点
  • 控制面建设:保障系统稳定运行

    • HouseKeeping组件:比如Balancer,Mover等, 这些组件不运行不会马上影响读写操作,但是长时间会积累系统性问题,例如读写不均衡导致IO热点等。
    • 可观测性设施:比如系统指标监控设施等,帮助快速发现定位问题。
    • 运维体系建设:从最基本的命令行手工操作,脚本自动化再到完善的运维平台。

应用场景

  • 大数据技术中的应用

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

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

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

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

  • 存储底座

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