HDFS原理与应用

100 阅读4分钟

青训营 HDFS原理与应用

概述

2022の夏天,半壶水响叮当的我决定充实一下自我


一、内容介绍

    青训营

总述

  • 了解HDFS的使用场景,尤其是在大数据场景中的常规应用,同时也了解HDFS在其它场景的一些应用,加深对存储系统应用场景的理解。
  • 了解HDFS的设计与实现,包括基本功能、运维体系等,对生产环境里分布式存储系统体系化建设有进一步认知。
  • 抽象总结一个分布式存储系统涉及的基本概念和设计问题

目标

  • HDFS的设计与实现
  • HDFS的产品化体系建设
  • HDFS多场景的应用
  • 分布式存储系统通用基本概念

相关术语:

1.1基础知识

  • 操作系统
  • 文件系统
  • POSIX文件系统
  • Linux
  • Python

1.2大数据术语

  • Hadoop
  • Spark
  • Flink
  • Kafka
  • OLAP/OLTP
  • Data warehouse: 数据仓库
  • AWS S3 / 阿里云OSS
  • HDFS
  • HBase

1.3分布式存储

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

二、HDFS基本介绍

2.1 HDFS: Hadoop Distributed File System/分布式文件系统

image.png

2.2 Windows单机文件系统

image (97).png image (96).png

2.3 Linux单机文件系统

image.png

2.4 分布式文件系统

image.png

2.5 分布式存储系统

image.png

2.6 HDFS 功能特性

image.png

2.7 演示环境一HDFS节点

前两个为高可用 image (18).jpeg

hdfs指令:

  • ls:文件目录
  • put:文件传输本地传HDFS

image.png


三、架构原理

HDFS架构介绍和组件用途
HDFS各组件的重要设计

3.1 HDFS组件

image.png

3.2 Client/客户端写/读流程

  • image.png
  • image.png

3.3 元数据节点NameNode

  1. 维护目录树 维护目录树的增删改查操作,保证所有修改都能持久化,以便机器掉电不会造成数据丢失或不—致

  2. 维护文件和数据块的关系 文件被切分成多个块,文件以数据块为单位进行多副本存放

  3. 维护文件块存放节点信息 通过接收DataNode的心跳汇报信息,维护集群节点的拓扑结构和每个文件块所有副本所在的DataNode类表。

  4. 分配新文件存放节点 Client创建新的文件时候,需要有NameNode来确定分配目标DataNode

image.png

3.4 数据节点DataNode

  1. 数据块存取 DataNode需要高效实现对数据块在硬盘上的存取

  2. 心跳汇报 把存放在本机的数据块列表发送给NameNode,以便NameNode能维护数据块的位置信息,同时让NameNode确定该节点处于正常存活状态

  3. 副本复制

  • 数据写入时Pipeline IO操作
  • 机器故障时补全副本

image.png


四、关键设计

分布式存储系统基本原理

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

image.png

4.2. NameNode目录树维护

image.png

4.3. NameNode数据放置

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

image.png

image.png

4.4. DataNode

高效,为了读取
绿:data07:文件系统的盘符
红:哈希算法得出:内容+校验码
image.png

4.5. HDFS 写异常处理: Lease Recovery/租约恢复

  1. 租约: Client要修改一个文件时,需要通过NameNode 上锁,这个锁就是租约(Lease),租约时间为响应NameNode时间

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

  • 副本不一致
  • Lease无法释放
  1. 解决方法:
  • Lease Recovery/收回租约
  • 选DataNode中最小,同步另外两个,返回NameNode,作最后结果

image.png

4.6. HDFS写异常处理:Pipeline Recovery/流水线恢复

  1. 情景: 文件写入过程中,DataNode侧(serve侧)出现异常挂掉了

  2. 异常出现的时机:

  • 创建连接时- 重连接
  • 数据传输时- 重构pipeline
  • complete阶段- 重构pipeline
  1. 解决方法: Pipeline Recovery/管道恢复

image.png

4.7. Client读异常处理

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

  2. 解决方法: 节点Failover/故障转移/换节点

  3. 增强情景: 节点半死不过,读取很慢(都问题,来回切换)

image.png

4.8. 旁路系统

Balancer:均衡DataNode的容量

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

image.png

4.9. 控制面建设

  1. 可观测性设施
  • 指标埋点
  • 数据采集
  • 访问日志
  • 数据分析
  1. 运维体系建设
  • 运维操作需要平台化
  • NameNode操作复杂
  • DataNode机器规模庞大
  • 组件控制面API

五、应用场景

大数据生态中的应用 通用存储场景

5.1 使用HDFS的公司

image.png

5.2 初窥大数据生态

image.png

5.2 演示: PySpark读写HDFS文件

image.png

image.png

image.png

实验一 image.png

image.png

image.png

实验二 image.png

image.png

image.png

  • 读取本地文件系上的文件

  • 把查询结果保存到本地文件

  • 读取HDFS上的文件

  • 把查询结果保存到HDFS上

5.3 ETL(解决大量数据写): Extract, Transform, Load

ETL:提取、变换、装载

image.png

5.4 OLAP(解决大量数据读)查询引擎

image.png

5.5 HBase(存储基座)

image.png

5.6 机器学习

image.png

5.7 通用存储应用

image.png


晚安玛卡巴卡

快乐暑假