在当今时代,数据量激增,管理大量数据成为一项挑战。随着数据量的增长,单个机器的存储限制很快被突破,因此需要一种解决方案来存储这些数据。分布式文件系统应运而生,它们通过网络存储数据,但也引入了网络的各种问题。
Hadoop在这样的背景下出现,它提供了一个非常稳定的文件系统——HDFS(Hadoop分布式文件系统)。HDFS是一个独特的文件系统,能够在普通硬件上存储和访问巨大的文件,并且允许流式数据访问。
HDFS是一个容错的数据存储文件系统,它运行在标准硬件上,旨在解决传统数据库无法解决的问题。因此,当处理大量数据时,它的全部潜力才能得到发挥。HDFS能够存储大量数据并方便地检索。为了存储如此大量的数据,文件被分散在多台机器上,并且这些文件被复制以保护系统免受系统故障导致的数据丢失。HDFS还支持应用程序的并行处理。
HDFS的一些特点如下:
HDFS如何存储数据?HDFS将文件分割成块,然后存储在数据节点上。名称节点是集群的主节点,连接到多个数据节点。这些数据块由主节点跨集群复制。它还告诉用户在哪里可以找到他们想要的信息。然而,在名称节点可以帮助进行数据存储和管理之前,文件必须首先被分割成更小、更易于管理的数据块。这被称为数据块分割。
为什么要使用HDFS?
什么是块?HDFS可以读写的最小数据量称为块。HDFS块的默认大小是128MB,尽管这可以更改。HDFS文件被分成块大小的部分并作为单独的单元存储。与文件系统不同,如果HDFS中的文件小于块大小,它不会占用整个块大小;例如,保存在HDFS中、块大小为128MB的5MB文件仅占用5MB的空间。HDFS块大小之所以大,仅仅是为了减少搜索成本。
HDFS块的复制方法是什么?HDFS的块大小和复制因子可以针对每个文件进行自定义。复制因子可以由应用程序以编程方式设置。它可以在文件创建时提供,并在需要时稍后更改。名称节点负责确定块大小。HDFS使用机架感知的副本放置策略,在同一个机架中制作两份数据副本,在另一个机架中制作第三份副本。
名称节点可以被视为系统的主节点。它跟踪文件系统树和系统所有文件和文件夹的元数据。元数据信息存储在两个文件中:“命名空间映像”和“编辑日志”。名称节点知道所有携带特定文件数据块的数据节点,但它不跟踪块位置。当系统启动时,这些信息每次都是从数据节点重建的。
名称节点是HDFS的控制器和管理器,因为它知道所有HDFS文件的状态和元数据,包括文件权限、名称和块位置。由于元数据很小,它被保存在名称节点的内存中,从而实现更快的数据访问。此外,由于HDFS集群可以同时被多个客户访问,所有这些数据都由一台计算机处理。它执行文件系统操作,如打开、关闭、重命名等。
数据节点是安装了GNU/Linux操作系统和数据节点软件的商品计算机。在集群中,每个节点(常见硬件/系统)都有一个数据节点。这些节点负责系统的数据处理。
数据节点通过执行文件系统上的读写操作来响应客户端请求。它们还根据名称节点的指示执行块创建、删除和复制等操作。
HDFS的相关性和实用性:在单个系统上存储10TB的文件极其困难。即使存储,对整个文件的每次读写操作都需要很长时间才能完成。然而,如果有许多128MB的块,对它们进行不同的读写操作就比一次性对整个文件进行操作要容易得多。因此,对文件进行分区,以允许更快的数据访问,减少寻道时间。
HDFS是一个分布式文件系统(或分布式存储),它运行在商品硬件上,并且可以管理大量的数据。可以使用HDFS将Hadoop集群扩展到数百或数千个节点。
HDFS数据可以从一个HDFS服务复制到另一个HDFS服务。为了提供容错,数据块被复制,应用程序可以定义文件的副本数量。复制因子可以在文件创建时设置,并稍后调整。集群中的每个数据节点都会向名称节点发送心跳和块报告,名称节点做出所有关于块复制的决策。
结论:每个HDFS集群包含一个名称节点,它存储元数据信息,如文件名和文件内容的位置。每个集群中可以拥有的文件数量受到这个单一节点的限制。当处理数百万个小文件时,如机器学习中的情况,这是一个重要的限制。