1、HDFS概述

1.1、介绍

在现代的企业环境中,单机容量往往无法存储大量数据,需要跨机器存储。统一管理分布在集群上的文件系统称为分布式文件系统。
HDFS(Hadoop Distributed File System)是Apache Hadoop项目的一个子项目。Hadoop非常适用于存储大型数据(比如TB和PB),其就是使用HDFS作为存储系统,HDFS使用多台计算机存储文件,并且提供统一的访问接口,像是访问一个普通文件系统一样使用分布式文件系统。
image.png

1.2、历史

image.png

2、HDFS的应用场景

2.1、适合应用的场景

(1)存储非常大的文件:这里非常大指的是几百M、G、或TB级别,需要高吞吐量,对延时没有要求。
(2)采用流式的数据访问方式:即一次写入,多次读取,数据集经常从数据源生成或者拷贝一次,然后在其上做很多分析工作。
(3)运行于商业硬件上:Hadoop不需要特别贵的机器,可运行于普通廉价机器,可以节约成本。
(4)需要高容错性。
(5)为数据存储提供所需的扩展能力。

2.2、不适合应用的场景

(1)低延时的数据访问,对延时要求在毫秒级别的应用,不适合采用HDFS,HDFS是为高吞吐数据传输设计的,因此可能牺牲延迟。
(2)大量小文件,文件的元数据保存在namenode的内存中,整个文件系统的文件数量会受限于namenode的内存大小。经验而言,一个文件/目录/文件块一般占有150字节的元数据内存空间。如果有100万个文件,每个文件占用一个文件快,则需要大约300M的内存。因此十亿级别的文件数量在现有商用机器上难以支持。
(3)多方读写,需要任意的文件修改 HDFS采用追加(append-only)的方式写入数据。不支持文件任意offset的修改。不支持多个写入器。

3、HDFS的架构

HDFS是一个主从(Master/Slave)体系结构
HDFS由四部分组成,HDFS Client、NameNode、DataNode和Secondary NameNode。
image.png
1、Client:就是客户端
文件切分:文件上传HDFS的时候,Client将文件切分成一个一个的Block,然后进行存储。
与NameNode交互:获取文件的位置信息
与DataNode交互:读取或者写入数据
Client提供一些命令来访问和管理HDFS,比如启动或者关闭HDFS

2、NameNode:就是Master,它是一个主管、管理者
管理HDFS的名称空间
管理数据块(Block)映射信息
配置副本策略
处理客户端读写请求

3、DataNode:就是Slave,NameNode下达命令,DataNode执行实际操作
存储实际的数据块
执行数据块的实际操作

4、Secondary NameNode:并非NameNode的热备。当NameNode挂掉的时候,它并不能马上替换NameNode并提供服务
辅助NameNode,分担其工作量
定期合并fsimage和fsedits,并推送给NameNode
在紧急情况下,可辅助恢复NameNode

4、NameNode和DataNode

4.1、NameNode作用

NameNode在内存中保存着整个文件系统的名称空间和文件数据块的地址映射
整个HDFS可存储的文件数受限于NameNode的内存大小

(1)NameNode元数据信息
文件名,文件目录结构,文件属性(生成时间,副本数,权限)每个文件的块列表。以及列表中的块与块所在的DataNode之间的地址映射关系 在内存中加载文件系统中的每个文件和每个数据块的引用关系(文件、block、datanode之间的映射信息)数据会定期保存到本地磁盘(fslmage文件和edits文件)
(2)NameNode文件操作
NameNode负责文件元数据的操作,DataNode负责处理文件内容的读写请求,数据流不经过NameNode,会询问它跟哪个DataNode联系。
(3)NameNode副本
文件数据块到底存放到哪些DataNode上,是由NameNode决定的, NN根据全局情况做出放置副本的决定。
(4)NameNode心跳机制
全权管理数据块的复制,周期性的接受心跳和块的状态报告信息(包含该DataNode上所有数据块的列表)若接受到心跳信息,NameNode认为DataNode工作正 常,如果在10分钟后还接受到不到DN的心跳,那么NameNode认为DataNode已经宕机 ,这时候NN准备要把DN上的数据块进行重新的复制。块的状态报告包含 了一个DN上所有数据块的列表,blocks report每个1小时发送一次.

4.2、DataNode的作用

提供真实文件数据的存储服务
(1)DataNode以数据块的形式存储HDFS文件
(2)DataNode相应HDFS客户端的读写请求
(3)DataNode周期性的向NameNode汇报心跳信息
(4)DataNode周期性的向NameNode汇报数据块信息
(5)DataNode周期性的向NameNode汇报缓存数据块信息
image.png备注:若经常被访问的数据,NameNode会将他放入到块缓存中,也就是内存中,提高访问速度
元数据:其实就是图中的a.txt的元数据信息下面的那些数据信息
因为文件的元数据都是存在namenode的内存中,所以一关机,元数据信息就会丢失,这时数据会定期保存到本地磁盘(就是fslmage文件和edits文件)

5、HDFS的副本机制和机架感知

5.1、HDFS的副本机制

所有的文件都是以block块的方式存放在HDFS文件系统当中,作用如下:
1、一个文件有可能大于集群中的任何一个磁盘,引入块机制可以很好的解决这个问题
2、使用块作为文件存储的逻辑单位可以简化存储子系统
3、块非常适合用于数据备份进而提供数据容错能力

block块的大小可以通过hdfs-site.xml当中的配置文件进行指定
image.png

5.2、机架感知

HDFS分布式文件系统的内部有一个副本存放策略:以默认的存放副本数=3为例:
第一个副本块存本机
第二个副本块存本机
第三个副本块存另外一台机架
前两个副本存本机是因为在本机上读取很快,如果第一个副本宕机了,还是可以很快的使用第二个副本,但是如果第一台机架都坏了,那么第一和第二的副本都不能使用了,此时就要使用第三个副本,所以要将第三个副本存放到另外一台机架上。

就是讲的就是:如何将文件进行切分,切分成block之后如何进行存储

6、HDFS的命令行使用

node01-hdfs.pdf

7、HDFS的高级使用命令

7.1、HDFS文件限额配置

就是规定某个用户最多只能用多少空间,怕被一个人占完,其它用户无法存储

hdfs文件的限额配置有两种方式:限制文件的个数或者文件的大小

上面文档中都有

7.1.1、数量限额

上面文档中都有

7.1.2、空间大小限额

上面文档中都有

7.2、HDFS的安全模式

8、HDFS的基准测试

8.1、测试写入速度

8.2、测试读取速度

8.3、清除测试数据

9、HDFS文件写入过程

上面文件中是对写入过程的详细文件描述
下面图演示上传blk1的过程,当blk1上传完成之后,开始上传blk2
image.png

10、HDFS文件读取过程

上面文件中是对读取过程的详细文件描述
image.png

11、HDFS元数据辅助管理

image.png
SecondaryNameNode默认触发条件是:
1、时间:1小时
2、文件大小达到64M
满足其中任一条件即可触发,也可以根据文档修改触发条件