HDFS分布式文件系统

Hadoop Distributed File System

为啥需要HDFS来存储数据呢?
在大数据时代,需要处理分析的数据集的大小已经远远超过了单台计算机的存储能力,因此需要将数据集进行分区并存储到若干台独立的计算机中。
但是,分区存储的数据不方便管理和维护,迫切需要一种文件系统来管理多台机器上的文件,这就是分布式文件系统。
分布式文件系统是一种允许文件通过网络在多台主机上进行分享的文件系统,可让多台机器上的多用户分享文件和存储空间。

啥是HDFS呢?

HDFS 是 Hadoop 的一个分布式文件系统,是 Hadoop 应用程序使用的主要分布式存储。HDFS 被设计成适合运行在通用硬件上的分布式文件系统。
在 HDFS 体系结构中有两类结点:
    一类是 NameNode,又叫“名称结点”;
    另一类是 DataNode,又叫“数据结点”。
    这两类结点分别承担 Master 和 Worker 具体任务的执行。


HDFS 总的设计思想是分而治之,即将大文件和大批量文件分布式存放在大量独立的服务器上,以便采取分而治之的方式对海量数据进行运算分析。
HDFS 数据单位 数据块 DataBlock --> 一秒定律来决定大小 --> 150M/S --> 128M

HDFS 是一个主/从体系结构,从最终用户的角度来看,它就像传统的文件系统一样,可以通过目录路径对文件执行 CRUD(Create、Read、Update 和 Delete)操作。
但由于分布式存储的性质,HDFS 集群拥有一个 NameNode 和一些 DataNode。NameNode 管理文件系统的元数据,DataNode 存储实际的数据。

客户端通过同 NameNode 和 DataNode 的交互来访问文件系统。

客户端通过联系 NameNode 来获取文件的元数据,而真正的文件 I/O 操作是直接和 DataNode 交互进行的。(NIO+SCOKET)

HDFS 主要针对“一次写入,多次读取”的应用场景,不适合实时交互性很强的应用场景,也不适合存储大量小文件。

HDFS基本原理

文件系统的问题

文件系统是操作系统提供的磁盘空间管理服务,该服务只需要用户指定文件的存储位置及文件读取路径,而不需要用户了解文件在磁盘上是如何存放的。

但是当文件所需空间大于本机磁盘空间时,应该如何处理呢?
加磁盘,但是加到一定程度就有限制了。
加机器,即用远程共享目录的方式提供网络化的存储,这种方式可以理解为分布式文件系统的雏形,它可以把不同文件放入不同的机器中,而且空间不足时可继续加机器,突破了存储空间的限制。

但是这种传动的分布式文件系统存在多个问题。

1)各个存储结点的负载不均衡,单机负载可能极高。例如,如果某个文件是热门文件,则会有很多用户经常读取这个文件,这就会造成该文件所在机器的访问压力极高。

2)数据可靠性低。如果某个文件所在的机器出现故障,那么这个文件就不能访问了,甚至会造成数据的丢失。

3)文件管理困难。如果想把一些文件的存储位置进行调整,就需要查看目标机器的空间是否够用,并且需要管理员维护文件位置,在机器非常多的情况下,这种操作就极为复杂。

HDFS 是个抽象层,底层依赖很多独立的服务器,对外提供统一的文件管理功能。HDFS 的基本架构:

 

用户访问 HDFS 中的 /a/b/c.mpg 这个文件时,HDFS 负责从底层的相应服务器中读取该文件,然后返回给用户,这样用户就只需和 HDFS 打交道,而不用关心这个文件是如何存储的。
为了解决存储结点负载不均衡的问题,HDFS 首先把一个文件分割成多个块,然后再把这些文件块存储在不同服务器上。
这种方式的优势就是不怕文件太大,并且读文件的压力不会全部集中在一台服务器上,从而可以避免某个热点文件会带来的单机负载过高的问题。

但是如果某台服务器坏了,那么文件就会读不全。如果磁盘不能恢复,那么存储在上面的数据就会丢失。为了保证文件的可靠性,HDFS 会把每个文件块进行多个备份,一般情况下是 3 个备份。
假如要在由服务器 A、B、C 和 D 的存储结点组成的 HDFS 上存储文件 /a/b/xxx.avi,则 HDFS 会把文件分成 4 块,分别为块 1、块 2、块 3 和块 4。
为了保证文件的可靠性,HDFS 会把数据块按以下方式存储到 4 台服务器上

采用分块多副本存储方式后,HDFS 文件的可靠性就大大增强了,即使某个服务器出现故障,也仍然可以完整读取文件,该方式同时还带来一个很大的好处,就是增加了文件的并发访问能力。
例如,多个用户读取这个文件时,都要读取块 1,HDFS 可以根据服务器的繁忙程度,选择从哪台服务器读取块 1

为了管理文件,HDFS 需要记录维护一些元数据,也就是关于文件数据信息的数据,如 HDFS 中存了哪些文件,文件被分成了哪些块,每个块被放在哪台服务器上等。

HDFS 把这些元数据抽象为一个目录树,来记录这些复杂的对应关系。这些元数据由一个单独的模块进行管理,这个模块叫作名称结点(NameNode)。存放文件块的真实服务器叫作数据结点(DataNode)。

HDFS的设计理念

https://blog.csdn.net/weixin_40035337/article/details/108011027

HDFS 的缺点

https://blog.csdn.net/weixin_40035337/article/details/108011057

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值