1. Hadoop HDFS教程

本Hadoop HDFS教程的目标是带您了解hadoop中的HDFS,例如不同的节点,HDFS中存储的数据,HDFS体系结构,分布式存储等HDFS特性,容错性,高可用性,可靠性,数据块等。 在这篇HDFS教程中还将讨论HDFS操作,即如何写入和读取HDFS中的数据和Rack Awareness。 本Hadoop HDFS教程的目标是详细介绍Hadoop分布式文件系统的所有概念。

2. HDFS教程 – 介绍

Hadoop分布式文件系统 – HDFS是当今的最可靠的存储系统。 HDFS是Hadoop的文件系统,用于存储运行在商用硬件集群上的超大文件。 它的设计原则是存储少量的大文件,而不是大量的小文件。 Hadoop HDFS还为Hadoop及其他组件提供容错存储层。 HDFS复制数据有助于我们实现此功能。 即使在硬件故障的情况下也可以可靠地存储数据。 它通过并行提供数据访问来提供对应用程序数据的高吞吐量访问。

3. HDFS节点

正如我们所知道的Hadoop以主从方式工作,HDFS也有两种类型的节点以相同的方式工作。 集群中有namenode和datanode。

3.1  HDFS Master(Namenode)

Namenode管理对客户端的文件访问。 它维护和管理从节点并为它们分配任务。 Namenode执行文件系统命名空间操作,如打开,关闭和重命名文件和目录。 它应该部署在可靠的硬件上。

3.2 HDFS Slave(Datanode)

Hadoop分布式文件系统中有许多从属节点或数据节点,用于管理数据存储。 这些从节点是执行任务并提供来自文件系统客户端的读写请求的实际工作节点。 他们还根据来自NameNode的指令执行数据块创建,删除和复制。 一旦将数据块写入数据节点,它就会将数据复制到其他数据节点,并继续处理,直到创建所提及的副本数量。 Datanodes可以部署在一般的商品硬件上,我们不需要将它们部署在非常可靠的硬件上。

4. Hadoop HDFS守护进程

在Hadoop部署中,有2种类型守护进程运行HDFS并且进行数据存储:

Namenode:这是在所有Master节点上运行的守护进程。 Namenode节点存储元数据,如文件名,块数,副本数量,块位置,块ID等。此元数据在主内存中可用,以便更快地检索数据。 在本地磁盘中,元数据的副本可用于持久性。 所以命名节点内存应该按照要求高。

Datanode:这是在Slave节点上运行的守护进程。 这些是存储数据的实际工作节点。

5. HDFS中的数据存储

无论何时需要将任何文件写入HDFS,都会将其分解为小块数据,即块。 HDFS的默认块大小为128 MB,可根据需要增加。 这些块以分布式方式存储在群集中的不同节点上。 这为MapReduce在群集中并行处理数据提供了一种机制。

HDFS HADOOP 数据存储

每个块的多个副本都存储在不同节点上的群集中。 这是数据的复制。 默认情况下,HDFS复制因子为3。 数据复制提供容错,可靠性和高可用性。

一个大文件被分成n个小块。 这些块以分布式方式存储在群集中的不同节点上。 每个块都被复制并存储在群集中的不同节点上。

6. Hadoop HDFS中的机架感知 Rack Awareness

Hadoop通常运行在分布在多个机架上的一组计算机上。 NameNode将块的副本放置在多个机架上以提高容错性。 NameNode会尝试在每个机架中至少放置一个块的副本,这样如果整个机架出现故障,系统将高度可用。优化副本位置可将HDFS与大多数其他分布式文件系统区分开来。机架感知复制放置策略的目的是提高数据可靠性,可用性和网络带宽利用率。

7. HDFS体系结构

该体系结构为您提供了Hadoop分布式文件系统的完整画面。有一个存储元数据的namenode,并且有多个datanode可以完成实际的存储工作。节点安排在机架中,数据块副本存储在群集中的不同机架上以提供容错功能。在本教程的其余部分中,我们将看到如何在HDFS中执行读取和写入操作?要读取或写入HDFS文件,客户端需要与Namenode进行交互。 HDFS应用程序需要一次写入多次读取文件访问模型。一次创建和写入的文件无法编辑。

Hadoop 分布式文件系统

Namenode存储用于存储实际数据的元数据和数据节点。客户端与namenode进行交互以执行任何要执行的任务,因为namenode是集群中的核心。

群集中有几个数据节点,它们将HDFS数据存储在本地磁盘中。 Datanode定期发送一个心跳消息给namenode,以表明它是活着的。此外,它按照复制因子将数据复制到其他数据节点。

8. Hadoop HDFS功能

在HDFS教程中,让我们看看Hadoop分布式文件系统的各种功能。

分布式存储

由于HDFS以分布式方式存储数据。它将数据分成小块并将其存储在群集的不同节点中。通过这种方式,Hadoop分布式文件系统提供了一种    Map reduce以处理大数据子集的方法,这些大数据被分解为更小的块并存储在多个节点中,并行地存储在多个节点上。 MapReduce是Hadoop的核心。

数据块

由于HDFS将庞大的文件分割成称为块的小块。块是文件系统中最小的数据单位。我们(客户端和管理员)对块的位置没有任何控制权。 Namenode决定所有这些事情。

HDFS默认块大小为128 MB,可根据需要增加。这与块大小为4 KB的OS文件系统不同。

如果数据文件大小小于HDFS的块大小,则块大小将等于数据块大小。例如,如果文件大小为129 MB,则将为其创建2个块。一个块的默认大小为128 MB,其他块只有1 MB,而不是128 MB,因为这会浪费空间(这里的块大小等于数据大小)。 Hadoop不会浪费127 MB的剩余空间。所以它仅为1 MB数据分配1 MB块。

以这种块大小存储数据的主要优点是它节省了磁盘寻道时间,而另一个优点是每次处理1个块的Mapper进程。所以1个Mapper一次处理大量数据。

在Hadoop分布式文件系统中,文件被分割成块,每个块存储在不同的节点上,每个块默认有3个副本。块的每个副本都存储在不同节点上以提供容错功能,并且这些块在不同节点上的放置由命名节点决定。命名节点使其尽可能多地分布。在数据节点上放置一个块时,它会考虑当时加载的特定数据节点的数量。

复制

Hadoop HDFS创建每个块的重复副本。这被称为复制。所有块都被复制并存储在群集中的不同节点上。它试图在每个机架上放置至少1个副本。

机架是什么意思?

数据节点安排在机架中。机架中的所有节点都由一台交换机连接,因此如果交换机或整个机架停机,则可以从另一个机架访问数据。

正如前面Hadoop HDFS教程中所看到的那样,默认的复制因子是3,可以根据需要通过编辑配置文件(hdfs-site.xml)将其更改为所需的值,

高可用性

数据块的复制和跨集群存储在多个节点上提供了高可用性的数据。即使网络链路或节点或某个硬件出现故障,我们也可以轻松地从不同路径或不同节点获取数据,因为数据在3个节点上的复制最少。这就是HDFS支持的高可用性功能。详细了解高可用性。

数据可靠性

正如我们在HDFS教程中看到的高可用性一样,数据在HDFS中被复制,它也被可靠地存储。由于复制,即使某些节点崩溃或某些硬件发生故障,块也是高度可用的。我们可以平衡集群(如果一个节点关闭,存储在该节点的数据块变得处于复制状态,或者如果突然变为活动状态的节点变为活动状态,则该节点处的数据块将被复制,我们需要平衡要创建的集群或根据情况销毁副本),在这种情况下,只需运行几个命令即可将复制因子设置为期望值。这就是数据如何可靠存储并提供容错和高可用性。

容错

HDFS为Hadoop和生态系统中的其他组件提供容错存储层。 HDFS可以与普通硬件计算机一起工作,这些硬件很有可能随时崩溃。因此,为了使整个系统具有高度容错性,HDFS可以在不同的地方复制和存储数据。任何数据默认存储在3个不同的位置。因此,即使其中一个已经损坏,另一个由于某种原因暂时不可用,那么可以从第三个访问数据。因此,不会丢失数据。这种复制因素有助于我们实现Hadoop称为容错的功能。

可扩展性

可扩展性意味着扩展或收缩集群。在Hadoop HDFS中,可伸缩性通过两种方式完成。

一是我们可以在群集的节点上添加更多磁盘。

为此,我们需要编辑配置文件并为新添加的磁盘创建相应的条目。在这里,我们需要提供停机时间,尽管它很少。所以人们通常更喜欢第二种缩放方式,即水平缩放。

水平缩放是在没有任何停机时间的情况下向群集中添加更多节点。这被称为水平缩放。

我们可以实时在群集中添加尽可能多的节点,而无需停机。这是Hadoop提供的独特功能。

高吞吐量访问应用程序数据

Hadoop分布式文件系统提供对应用程序数据的高吞吐量访问。吞吐量是单位时间内完成的工作量。它描述了从系统获取数据的速度有多快,通常用于测量系统的性能。当我们想要执行一项任务或一项行动时,这项工作就会在不同系统之间分配和共享。因此,所有的系统将独立并行地执行分配给它们的任务。所以这项工作将在很短的时间内完成。通过这种方式,HDFS具有良好的吞吐量。通过并行读取数据,减少了大量读取数据的实际时间。

Hadoop HDFS操作

在Hadoop中,我们需要通过编程或通过命令行界面(CLI)与文件系统进行交互。通过本命令手册了解如何使用CLI与HDFS进行交互。

Hadoop分布式文件系统与Linux文件系统有许多相似之处。因此,我们可以使用本地文件系统执行几乎所有的操作,例如创建目录,复制文件,更改权限等。

它还为用户,组和其他人提供了不同的访问权限,例如读取,写入和执行。

我们可以通过浏览器浏览文件系统,如http:// master-IP:50070。通过将浏览器指向此URL,您可以获取群集信息,如已用空间/可用空间,活动节点数量,死点节点数量等。

HDFS读取操作

每当客户想要从HDFS读取任何文件时,客户端需要与namenode进行交互,因为Namenode是唯一存储有关数据节点元数据的地方。 Namenode指定存储数据的Slave节点的地址或位置。客户端将与指定的数据节点交互并从那里读取数据。为了安全性/认证目的,namenode向客户端提供令牌给数据节点读取文件。

HDFS 文件读取操作

在Hadoop HDFS读取操作中,如果客户端要读取存储在HDFS中的数据,则需要先与namenode进行交互。因此,客户端与分布式文件系统API进行交互,并向namenode发送请求以发送块位置。因此,Namenode会检查客户端是否有足够的权限访问数据,然后namenode将共享数据存储在数据节点中的地址。

通过地址,namenode也与客户端共享安全令牌,在访问数据进行身份验证之前,它需要向datanode显示该安全令牌。

当客户端转到datanode读取文件时,在检查令牌之后,datanode允许客户端读取该特定块。客户端然后打开输入流并开始从指定的datanode读取数据。因此,以这种方式,客户端直接从datanode读取数据。

如果在读取文件datanode时突然失败,那么客户端将再次访问namenode,并且namenode将共享该块存在的其他位置。了解更多关于文件读取操作。

HDFS写入操作

正如阅读文件时看到的,客户端需要与Namenode进行交互。同样,对于写入文件,客户端也需要与namenode进行交互。因此,Namenode提供数据必须由客户端写入的Slave 节点的地址。

一旦客户端完成写入块,从站开始将块复制到另一个从站,然后将该块复制到第三个从站。这是使用默认复制因子3的情况。在创建所需的复制后,它会向客户端发送最终确认。因此,认证过程与阅读部分中的相似。

HDFS 文件写入操作

无论何时客户需要编写任何数据,它都需要与namenode进行交互。因此,客户端与分布式文件系统API交互并向namenode发送请求以发送从属位置。

Namenode共享数据必须写入的位置。然后,客户端与必须写入数据的datanode进行交互,并开始通过FS数据输出流写入数据。一旦数据被写入并复制,datanode向客户端发送确认通知数据完全写入。

我们已经在这个Hadoop HDFS教程中讨论了如何编写一个文件,客户端需要先与namenode进行交互,然后开始在namenode通知的datanode上写入数据。

只要客户端完成写入第一个块,第一个datanode就会将同一个块复制到其他datanode。因此,该数据节点在接收到该块后开始将该块复制到第三个数据节点。第三次向第二个datanode发送确认,第二个datanode向第一个datanode发送确认,然后第一个datanode发送最终确认(在默认复制因子的情况下)。

无论我们的复制因素如何,客户端只发送一份数据副本,而datanodes则复制这些数据块。因此,在Hadoop HDFS中写入文件并不昂贵,因为并行地将多个块写入多个datanode。



关注微信服务号,手机看文章
关注微信服务号,手机看文章