Hadoop分布式文件系统(HDFS)架构–适用于每位数据工程师的HDFS指南
在当代,处理海量数据是司空见惯的。从下一个WhatsApp消息到下一个Tweet,您在与技术互动的每个步骤都在创建数据。现在,将其乘以45亿互联网用户-数学简直令人难以置信!
但是有没有想过如何处理这样的数据?它存储在单台机器上吗?如果机器出现故障怎么办?您会在凌晨3点发动*咳嗽*时失去可爱的推文吗?
答案是否定的。我非常确定您已经在考虑Hadoop。Hadoop是一个了不起的框架。借助Hadoop,您可以利用Hadoop分布式文件系统(HDFS)的强大功能-Hadoop的存储组件。它可能是Hadoop最重要的组件,需要详细说明。
因此,在本文中,我们将学习Hadoop分布式文件系统(HDFS)的真正含义及其各种组件。另外,我们将了解HDFS的特点-这就是它的特殊之处。让我们找出答案!
目录
什么是Hadoop分布式文件系统(HDFS)?
HDFS的组成部分是什么?
HDFS中的块?
HDFS中的Namenode
HDFS中的数据节点
HDFS中的辅助节点
复制管理
复制块
Hadoop中的机架是什么?
机架意识
什么是Hadoop分布式文件系统(HDFS)?
很难在一台机器上维护大量数据。因此,有必要将数据分解为较小的块并将其存储在多台计算机上。
在机器网络上管理存储的文件系统称为分布式文件系统。
Hadoop分布式文件系统(HDFS)是Hadoop的存储组件。Hadoop上存储的所有数据都以分布式方式存储在计算机集群中。但是它具有一些定义其存在的属性。
巨大的卷–作为分布式文件系统,它具有很高的存储能力,可存储PB的数据,而不会出现小故障。
数据访问–基于以下哲学:“最有效的数据处理模式是一次写入,即多次读取模式”。
经济高效– HDFS在商用硬件群集上运行。这些都是便宜的机器,可以从任何供应商处购买。
Hadoop分布式文件系统(HDFS)的组成部分是什么?
从广义上讲,HDFS有两个主要组件–数据块和存储这些数据块的节点。但是,它所具有的不仅仅是眼神。因此,让我们一个接一个地看一下以获得更好的理解。
HDFS块
HDFS将文件分解为较小的单元。这些单元中的每一个都存储在集群中的不同计算机上。但是,这对于使用HDFS的用户是透明的。对他们而言,似乎将所有数据存储到一台计算机上。
这些较小的单元是HDFS中的块。默认情况下,每个块的大小为128MB,您可以根据需要轻松更改它。因此,如果您有一个512MB的文件,它将分成4个块,每个块存储128MB。
hadoop hdfs块
但是,如果文件大小为524MB,则它将分为5个块。其中4个将分别存储128MB,总计512MB。而第5个将存储剩余的12MB。那就对了!最后一块将不会占用磁盘上的完整128MB。
hadoop hdfs块拆分
但是,您一定想知道,为什么在一个块中这么大?为什么不每个10KB的多个块?嗯,我们通常在Hadoop中处理的数据量通常为petra字节或更高。
因此,如果我们创建较小的块,最终将导致大量的块。这意味着我们将不得不处理关于块位置的同样大的元数据,这只会产生大量的开销。我们真的不想要那个!
将数据存储在块中而不是保存整个文件有很多好处。
文件本身太大,无法单独存储在任何单个磁盘上。因此,谨慎地将其分布在群集上的不同计算机上。
通过利用并行性,它还可以适当地分散工作负载并防止单个计算机阻塞。
现在,您一定想知道,集群中的计算机如何?它们如何存储块以及元数据存储在哪里?让我们找出答案。
HDFS中的Namenode
HDFS在主-主架构中运行,这意味着集群中有一个主节点和几个工作节点。主节点是Namenode。
Namenode是在群集中单独节点上运行的主节点。
管理文件系统名称空间,该名称空间是文件系统树或文件和目录的层次结构。
存储所有文件的信息,例如文件所有者,文件权限等。
它还知道文件所有块的位置及其大小。
所有这些信息都以两个文件的形式在本地磁盘上永久维护:Fsimage和Edit Log。
Fsimage将有关文件和目录的信息存储在文件系统中。对于文件,它存储复制级别,修改和访问时间,访问权限,阻止文件组成以及文件的大小。对于目录,它存储修改时间和权限。
另一方面,编辑日志会跟踪客户端执行的所有写操作。定期将其更新为内存中的元数据以服务读取请求。
每当客户端想要将信息写入HDFS或从HDFS读取信息时,它都会与Namenode连接。Namenode将块的位置返回给客户端,并执行操作。
是的,没错,Namenode不存储块。为此,我们有单独的节点。
HDFS中的数据节点
数据节点是工作节点。它们是廉价的商品硬件,可以轻松添加到群集中。
当名称节点询问时,数据节点负责存储,检索,复制,删除等块。
他们定期将心跳发送到Namenode,以便它知道其健康状况。这样,DataNode还将发送存储在其上的块列表,以便Namenode可以在其内存中维护块到Datanode的映射。
但是,除了群集中的这两种类型的节点外,还有另一个称为“辅助名称节点”的节点。让我们看看这是什么。
HDFS中的辅助Namenode
假设我们需要重新启动Namenode,如果发生故障,可能会发生这种情况。这意味着我们必须将Fsimage从磁盘复制到内存。另外,我们还必须将编辑日志的最新副本复制到Fsimage,以跟踪所有事务。但是,如果很长时间后重新启动节点,则“编辑”日志的大小可能会增加。这意味着从编辑日志中应用事务将花费大量时间。在此期间,文件系统将处于脱机状态。因此,为解决此问题,我们引入了Secondary Namenode。
Secondary Namenode是群集中存在的另一个节点,其主要任务是定期将Edit日志与Fsimage合并,并生成Primary的内存中文件系统元数据的检查点。这也称为Checkpointing。
hadop hdfs检查点
但是检查点过程在计算上非常昂贵,并且需要大量内存,这就是为什么次要名称节点在群集上的单独节点上运行的原因。
但是,尽管有其名称,但辅助Namenode并不充当Namenode。它仅用于检查点并保留最新Fsimage的副本。
HDFS中的复制管理
现在,HDFS的最佳功能之一是块的复制,这使其非常可靠。但是,它如何复制这些块并将其存储在哪里?现在让我们回答这些问题。
复制块
HDFS是Hadoop的可靠存储组件。这是因为存储在文件系统中的每个块都被复制到集群中的不同数据节点上。这使HDFS具有容错能力。
HDFS中的默认复制因子为3。这意味着每个块将具有两个以上的副本,每个副本存储在群集中的单独DataNode上。但是,该数字是可配置的。
hadoop hdfs复制
但是您一定想知道这是否意味着我们占用了过多的存储空间。例如,如果我们有5个128MB的块,则等于5 * 128 * 3 = 1920 MB。真正。但是,这些节点就是商品硬件。我们可以轻松扩展集群以添加更多这些计算机。购买机器的成本远低于丢失数据的成本!
现在,您一定想知道,Namenode如何确定要在哪个Datanode上存储副本?好了,在回答这个问题之前,我们需要看一下什么是Hadoop中的机架。
Hadoop中的机架是什么?
甲机架是机器的集合(30-40 Hadoop中)被存储在相同的物理位置。Hadoop集群中有多个机架,所有机架都通过交换机连接。
架
机架意识
副本存储是可靠性和读/写带宽之间的折衷方案。为了提高可靠性,我们需要将块副本存储在不同的机架和Datanode上,以提高容错能力。当副本存储在同一节点上时,写带宽最低。因此,Hadoop有一个默认策略来处理这个难题,也称为机架感知算法。
例如,如果块的复制因子为3,则第一个副本存储在客户端写入的同一Datanode上。第二个副本存储在不同的Datanode但随机选择的不同机架上。虽然第三个副本与第二个副本存储在同一机架上,但存储在不同的Datanode上,但仍是随机选择的。但是,如果复制因子较高,则后续副本将存储在群集中的随机数据节点上。
题库