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

81 阅读3分钟

字节跳动青训营第4期 第8课 HDFS原理与应用

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

[TOC]

HDFS基本介绍

HDFS:Hadoop Distributed File System

Hadoop体系.jpg

分布式文件系统的优点:

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

HDFS主要功能特性

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

HDFS架构原理

组件

HDFS基本组件.jpg

HDFS的基本组件结构如上

Client/SDK负责和用户交互,NameNode是元数据管理节点,DataNode是数据持久化存储节点。用户数据最终都存储在DataNode上。在实际使用中,NameNode所要管理的数据很少,所以NameNode的数量往往小于DataNode。

client写流程.jpg

Client发起写操作时,先要访问NameNode去获取可以进行存储操作的所有DataNode列表,获取到列表后,访问其中第一个DataNode,把数据全部写入该DataNode,写入完成后直接返回,由这个DataNode向其他副本集进行扩展。

client读流程.jpg

Client发起读操作,直接从NameNode获取目标副本集列表,然后选择其中一个副本集进行读取。

NameNode主要功能

  1. 维护目录树,保证所有修改可以持久化
  2. 维护文件和数据块的关系,文件被切分成多个块,以数据块为单位进行多副本存放
  3. 维护存放块节点信息
  4. 分配新文件存放节点

DataNode主要功能

  1. 数据块的存储
  2. 心跳汇报
  3. 副本复制
    1. 数据写入时Pipeline IO
    2. 机器故障时补全副本

关键设计

分布式存储系统基本概念

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

NameNode目录树保护

fsimage

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

EditLog

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

NameNode数据放置

数据块维护

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

数据放置策略

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

DataNode关键设计

数据块的硬盘存放

  • 文件在NameNode分为Block
  • DataNode以Block为单位对数据进行存储

启动扫盘

  • DataNode需要知道本机存放了哪些数据块
  • 启动时将数据块id加载到内存中

写异常处理 Lease Recovery

场景:文件写了一半,client突然挂了

  • 副本不一致
  • Lease无法释放

租约:Client要修改一个文件时,需要给NameNode上锁,这个锁也就是租约

解决方式:Lease Recovery

写异常处理 Pipeline Recovery

场景:写文件的过程DataNode侧出现异常

异常出现的时机:

  1. 创建连接时
  2. 数据传输时
  3. Complete阶段

读异常处理 Failover

场景:读文件的过程DataNode侧出现异常

旁路系统

  • Balancer:均衡DataNode的容量
  • Mover:确定副本放置位置合理

控制面建设

可观测性设施

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

运维体系建设

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