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

178 阅读4分钟

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

HDFS基本介绍

image.png

常见文件系统

Windows单机文件系统

image.png

Linux文件系统

BTRFS,ZFS,XFS,EXT4 Linux目前支持近一百种文件系统

分布式文件系统

优点 大容量 高可靠 低成本

目前的分布式文件系统

image.png

HDFS功能特性

分布式

HDFS是收到GFS启发,用java实现的开源系统,没有实现完整的POSIX文件系统语义

容错

自动处理、规避多种错误场景,例如常见的网络错误、机器宕机等。

高可用

一主多备模式实现元数据高可用,数据多副本实现用户数据的高可用

高吞吐

Client直接从Data Node读取用户数据,服务端支持海量client并发读写。

可扩展

支持联邦集群模式,DataNOde数量可以达10w级别

廉价

只需要统一硬件,无需定制高端的昂贵硬件设备

架构原理

HDFS组件

image.png client 访问HDFS的机器。

NameNode HDFS的中枢节点,三大件中最为复杂的。

DataNode 储存信息的结点。

Client写流程

image.png

Client读流程

image.png

元数据节点NameNode

维护目录树

维护文件和数据块的关系

维护文件块存放节点信息

分配新文件存放节点

数据节点DataNode

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

关键设计

分布式存储系统的基本概念

容错能力

能处理绝大部分异常场景。

一致性模型

为实现容错,数据必须多副本存放,一致性要解决的问题是如何保障副本的内容一致。

可扩展性

具备横向扩张能力

节点体系

常见有主从模式,对等模式,不管是哪种模式,都要保持高可用。

数据放置

系统由多个节点组成,数据是多个副本存放时,要考虑数据存放的策略。

单机存储引擎

在绝大部分存储系统中,数据都是需要落盘持久化,单机引擎需要解决根据系统特点,如何高效存取硬盘数据。

NameNode目录树维护

fsimage

image.png

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

Editlog

  • 目录树的修改日志
  • client更新目录树需要持久化EditLog后才能表示更新成功
  • EditLog可存放在本地文件系统。
  • 关键点在于如何实现EditLog共享。

image.png

NameNode数据放置

数据块信息维护

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

数据放置策略

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

DataNode

数据块的硬盘存放

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

启动扫盘

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

HDFS写异常处理:Lease Recovery

文件写入时client挂了会发生什么

  • 副本不一致
  • Lease无法释放,Client要修改一个文件时,要通过NameNode上锁,就是Lease

解决方法

Lease Recovery: 对于副本不一致的解决方法的思想 选择三个副本中最小的副本作为最终结果。 Lease无法释放的解决方法 设置租约时间。

HDFS写异常处理:Pipeline Recovery

文件写入过程中,DataNode挂了

出现时间

创建连接时 数据传输时 complete时

解决方法

Pipeline Recovery

Client读异常

DataNode出现异常

解决方法

切换另外一个Failover

旁路系统

Balancer:均衡DataNode的容量。 Mover:确保副本放置符合策略要求。

控制面建设

可观测性设施

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

运维体系建设

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

应用场景

image.png