HDFS | 青训营笔记

110 阅读2分钟

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

一、HDFS的基本介绍

HDFS是Hadoop的分布式文件系统,具有分布式、高吞吐、高容错、高可用、可扩展、廉价的特点。

HDFS组件:

1.Client/SDK

写流程:

屏幕截图 2022-07-30 162350.png

读流程:
1.向NameNode发送getBlockLocations请求
2.从NameNode返回副本目标DN列表
3.读取数据块

2.NameNode(中枢节点,数据管理)

3.DataNode(数据存储)

作用:数据块存取

心跳汇报(跟NameNode保持汇报,让NameNode确定该节点存
活)

副本复制(故障时可补上)

Q:对象存储和文件系统有什么区别吗

A:

1.协议。 访问方式也不同。文件存储以挂载方式访问。

  1. IO特点:针对对象存储来说,接口简单,一个对象就可以看成是一个文件,只能全写全拼,都是以大文件为主,因此要求足够的IO带宽。文件存储的话具有更丰富的及入口,是需要考虑目录、文件属性等支持的。实现一个支持并行化的文件存储应该是很困难的。

  2. Ceph是同时支持对象存储和文件存储的,只是对应的接口不同。对象存储接口主要以S3与Swift为主,文件存储的话是以libcephfs库与posix接口为主。因此在接口上会存在一定的差异。

二、HDFS关键设计

1.NameNode目录树维护

为防止数据丢失,引入EditLog机制,editlog主要是在NameNode已经启动情况下对HDFS进行的各种更新操作进行记录,HDFS客户端执行所有的写操作都会被记录到editlog中。这样的好处为避免系统运行变得十分缓慢,如果每次更新都是在fsimage上进行,里面文件一般都很大,容易导致系统缓慢。

2.NameNode数据放置

3.DataNode

数据块的硬盘存放&启动扫盘

4.HDFS写异常处理

案例1.文件写了一半,client自己挂了。
产生问题:1.副本不一致2.Lease无法释放

案例2.租约。client修改文件时,需要NameNode上锁,如果中途自己挂了,也有个锁

解决方法:Lease Rescovery

租约问题:时间限制,上锁时NameNode每隔段时间确认是否存活,一定时间没有回应就会释放这个锁。

案例3.文件写入过程中,DataNode侧出现异常挂了

时机有:
创建连接时 
数据传输时  
complete阶段 

解决方法:Pipeline Recovery

重新连接,pipeline重新构建

案例4.读取文件中,DataNode侧出现异常挂掉了

解决方法:节点Failover。换个节点重新读