HDFS原理|青训营笔记

89 阅读3分钟

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

本次笔记重点内容

  1. HDFS 架构
  2. HDFS 设计与异常处理
  3. HDFS应用场景

HDFS——Hadoop Distributed File System

image.png

HDFS是一个分布式的文件系统,可以自动处理、规避多种错误场景;数据多副本提高容错;服务端支持海量client并发读写;成本低,无需高端定制硬件设备。

架构原理

云数据节点 NameNode

大数据框架都是分布式的,可能每个角色都运行在各个不同的服务器上面,需要进行通信的时候就要需要网络的支持,而在我们客户端需要读一个文件的信息时,必须知道我们这个文件被分成了多少个block,各个block又分别存储在哪个服务器上,这种用于描述文件的信息被称为文件的元数据信息(metaData),而metaData就是存储在NameNode的内存中的。它维护目录树的增删改查操作,维护文件和数据块的关系,维护文件块存放节点信息,分配新文件存放节点

数据节点 DataNode

数据卡存放,确定节点处于正常存活状态,副本复制

客户端 Client

实现了数据读写的容错等较为复杂的逻辑

心跳机制

image.png 心跳机制解决了HDFS集群间的通信问题,还是NameNode命令DataNode执行操作的途径。用3秒作为频率,若超过秒数过多还没收到心跳,如某一个DataNode超过10min还没向NameNode发送心跳,此时NameNode就会判定该DataNode不可用,此时客户端的读写操作就不会再传达到该DataNode上。

从client(某台机器)访问HDFS,程序通过SDK访问HDFS,NameNode很少,是最复杂的中枢节点,对元数据进行管理,无论写还是读数据,都要通过NameNode获取准确位置等信息,用户数据则全部存在DataNode的硬盘上,DataNode数量很多。

写流程

image.png

读流程

image.png

关键设计

NameNode目录树的维护

image.png 蓝色的是目录,绿色的是文件。完整的数据结构会存放在fsimage的内存中,它会定期的存入硬盘,修改是只会修改内存中的目录树。如果节点没了之后,因为修改没有实时保存到硬盘上而导致里面的数据丢失怎么办?EditLog是目录树的修改日志,会实时刷入硬盘,可以通过它去恢复完整的目录树。

NameNode数据放置——数据分散在各个节点上,如何定位找到它们?

数据要多备份放置在多个节点上,这样一个丢失了,还可以用另外的节点操作。

DataNode设计——数据如何硬盘存放?

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

Client读写的异常处理

  1. 文件写的时候客户端自己挂了:副本不一致,导致每次读出来的数据不一样;Lease(客户端要修改文件时,需要通过NameNode上锁,这个锁就是租约Lease,要定期刷的)无法释放,导致文件永远都无法被修改。解决方法:Lease Recovery
  2. 文件写入过程中DataNode出现异常,解决方法:Pipeline Recovery
  3. 读取文件过程中DataNode出现异常,解决方法:节点Failover

应用场景

  1. ETL——Extract、Transform、Loadimage.png
  2. OLAP引擎 image.png
  3. HBaseimage.png
  4. 机器学习
  5. 通用存储应用

image.png

参考:带你入坑大数据(一) --- HDFS基础概念篇 - 掘金 (juejin.cn)