初识Hadoop Distributed File System(HDFS)

初识Hadoop Distributed File System(HDFS)

首先,学习大数据技术时需要关注的重点

1.分而治之

2.并行计算

3.计算向数据移动

4.数据本地化读取

今天就来聊聊大数据的一些历史,以及HDFS。

一、Hadoop

1、Hadoop之父Doug Cutting

Cutting儿子有个玩具小象,所以这下能够理解为啥Hadoop的LOGO是个象了。

2、Hadoop时间简史

(1)谷歌著名的三篇论文:前两篇是Hadoop的思想之源

《The Google File System》 2003年

《MapReduce:Simplified Data Processing on Large Clusters》 2004年

《Bigtable:A Distributed Storage System for Structured Data》 2006年

(2)Hadoop由Apache Software Foundation于2005年秋天作为Lucene的子项目Nutch的一部分正式引入。

(3)2006年3月份,Map/Reduce和Nutch Distributed File System (NDFS)分别被纳入称为Hadoop的项目中。

(4)Cloudera公司在2008年开始提供基于Hadoop的软件和服务。

(5)2016年10月hadoop-2.6.5。

(6)2017年12月hadoop-3.0.0。

3、Hadoop项目包含

(1)Hadoop Common(1.x+)

(2)Hadoop Distributed File System(HDFS)(1.x+)

(3)Hadoop YARN(2.x+)

(4)Hadoop MapReduce(1.x+)

4、Apache其他和Hadoop相关的项目

(1)Ambari

(2)Avro

(3)Cassandra

(4)Chukwa

(5)HBase:思想源于Google的《Bigtable这篇论文》

(6)Hive

(7)Mahout

(8)Pig

(9)Spark

(10)Tez

(11)Zookeeper:分布式协调服务

分布式文件系统那么多,为什么Hadoop项目还要开发一个hdfs文件系统?

hdfs能更好的支持分布式计算。

二、HDFS存储模型

1、文件线性按字节切割成块(block),具有offset、id

2、文件与文件的block大小可以不一样

3、一个文件除最后一个block,其他block大小一致

4、block的大小依据硬件的IO特性调整:1.x时默认64M,2.x时默认128M

5、block被分散存放在集群的节点中,具有location

6、block具有副本(replication),副本没有主从概念,不能出现在同一个节点

7、副本是满足可靠性和性能的关键

8、文件上传可以指定block大小和副本数,上传后只能修改副本数

9、一次写入多次读取,不支持修改

10、支持追加数据

三、HDFS架构设计

1、HDFS是一个主从(Master/Slaves)架构

2、由一个NameNode和一些DataNode组成

3、面向文件包含:文件数据(data)和文件元数据(metadata)

4、NameNode负责存储和管理文件元数据,并维护了一个层次型的文件目录树

5、DataNode负责存储文件数据(block块),并提供block的读写

6、DataNode与NameNode维持心跳,并汇报自己持有的block信息

7、Client 和NameNode交互文件元数据 和DataNode交互文件block数据

四、HDFS角色功能

1、NameNode

(1)完全基于内存存储文件元数据、目录结构、文件block的映射

(2)需要持久化方案保证数据的可靠性

(3)提供副本放置策略

2、DataNode

(1)基于本地磁盘存储block(文件的形式)

(2)并保存block的校验和数据,保证block的可靠性

(3)与NameNode保持心跳,汇报block列表状态

五、HDFS元数据持久化

1、任何对文件系统元数据产生修改的操作,NameNode都会使用一种称为EditLog的事务日志记录下来

2、使用FsImage存储内存所有的元数据状态

3、使用本地磁盘保存EditLog和FsImage

4、EditLog具有完整性,数据丢失少,但恢复速度慢,并有体积膨胀风险

5、FsImage具有恢复速度快,体积与内存数据相当,但不能实时保存,数据丢失多

6、NameNode使用了FsImage + EditLog 整合的方案

滚动将增量的EditLog更新到FsImage,以保证更近时点的FsImage和更小的EditLog体积

六、HDFS安全模式

1、HDFS搭建时会格式化,格式化操作会产生一个空的FsImage

2、当NameNode启动时,它从磁盘中读取EditLog和FsImage

3、将所有的EditLog中的事务作用在内存中FsImage上

4、并将这个新版本的FsImage从内存中保存到本地磁盘上

5、然后删除旧的EditLog,因为这个旧的EditLog的事务都已经作用在FsImage上了

七、HDFS中的SNN

SecondaryNameNode(SNN)

1、在非HA模式下,SNN一般是独立的节点,周期完成NameNode的EditLog向FsImage合并,减少EditLog大小,减少NN启动时间

2、根据配置文件设置时间间隔fs.checkpoint.period,默认3600秒

3、根据配置文件设置edits log大小,fs.checkpoint.size 规定edits文件的最大值(默认是64MB)

八、Block的副本放置策略

1、第一个副本:

放置在上传的DataNode;如果是集群外提交,则随机挑选一台磁盘不太满、CPU不太忙的节点

2、第二个副本:

放置在于第一个副本不同机架的节点上

3、第三个副本:

与第二个副本相同机架的节点

4、更多副本:

随机节点。

九、HDFS写流程

1、Client和NameNode连接创建文件元数据

2、NameNode判定元数据是否有效

3、NameNode触发副本放置策略,返回一个有序的DataNode列表

4、Client和DataNode建立Pipeline连接

5、Client将块分成packet(64KB),并使用chunk(512B)+ chucksum(4B)填充

6、Client将packet放入发送队列dataqueue中,并向第一个DataNode发送

7、第一个DataNode收到packet后本地保存并发送给第二个DN

8、第二个DataNode收到packet后本地保存并发送给第三个DN

9、这一过程中,上游节点同时发送下一个packet

生活中类比工厂的流水线,结论:流式其实也是变种的并行计算

10、HDFS使用这种传输方式,副本数对于client是透明的

11、当block传输完成,DataNode们各自向NameNode汇报,同时client继续传输下一个block

12、所以,client的传输和block的汇报是并行的

十、HDFS读流程

1、为了降低整体的带宽消耗和读取延时,HDFS会尽量让读取程序读取离它最近的副本

2、如果在读取程序的同一个机架上有一个副本,那么就读取该副本

3、如果一个HDFS集群跨越多个数据中心,那么客户端也将首先读本地数据中心的副本

语义:下载一个文件

Client尝试和NameNode交互文件元数据获取fileBlockLocation

NameNode会按距离策略排序返回

Client尝试下载block并校验数据完整性


下载一个文件其实是获取文件所有的block元数据,那么子集获取某些block应该成立,HDFS支持client给出文件的offset自定义连接哪些block的DN,自定义获取数据,这个是支持计算层的分治、并行计算的核心


发布于 2021-06-20 22:41