六、深度剖析 Hadoop 分布式文件系统(HDFS)的数据存储机制与读写流程 ...

打印 上一主题 下一主题

主题 895|帖子 895|积分 2685

深度剖析 Hadoop 分布式文件系统(HDFS)的数据存储机制与读写流程

在当今大数据范畴当中,Hadoop 分布式文件系统(HDFS)作为极为关键的核心组件之一,为海量规模的数据的存储以及处置惩罚构筑起了坚实无比的根基。本文将会对 HDFS 的数据存储机制以及读写流程睁开全面且深入的探究,通过将原理与现实的实例精密结合的方式,助力广大读者更加全面地理解 HDFS 的工作原理以及其具体的应用场景。
一、HDFS 概述

HDFS 是一种高度分布式的文件系统,其专门为在大规模的集群环境之下存储和管理海量规模的数据而精心设计。它具备着极高的容错性、极为可靠的稳固性以及强盛的可扩展性等明显特点,能够轻松处置惩罚 PB 级以致更加巨大的数据量。HDFS 采用了主从架构的模式,主要是由 NameNode 和 DataNode 共同构成。NameNode 负责对文件系统的元数据进行管理,其中涵盖了文件名、文件的目录布局以及文件块的位置信息等等;而 DataNode 则承担着现实的数据存储任务。
二、数据存储机制

(一)数据块(Block)

HDFS 会将文件分割成为固定大小的数据块来进行存储,默认的数据块大小为 128MB(在 Hadoop 3.x 版本当中,可以进行配置以便设定为更大的值,例如 256MB 大概 512MB)。采取如许的举措具有诸多的优势:


  • 首先,对于数据的分布式存储与处置惩罚是非常有益的。将大文件拆分为小块,能够使得不同的 DataNode 并行地存储和处置惩罚这些数据块,从而极大地提升系统的并发处置惩罚能力。
  • 其次,便于数据的容错与规复。假如某个数据块受到破坏,仅仅需要重新复制该数据块即可,无需对整个文件进行利用。
  • 最后,数据块的大小设置需要综合考虑磁盘传输服从等多方面的因素。较大的数据块可以减少磁盘寻道时间和传输开销,但是同时也会增长内存占用等题目,因此需要依据现实环境进行公道的配置。
    例如,假设有一个大小为 1GB 的文件,按照默认的 128MB 数据块大小进行分割,那么该文件将被分别为 8 个数据块(1GB = 1024MB,1024MB / 128MB = 8)。
(二)副本机制

为了确保数据的可靠性与可用性,HDFS 采用了多副本存储的计谋。每个数据块在不同的 DataNode 上会保存多个副本(默认是 3 个副本)。副本的放置计谋在 HDFS 的数据存储机制当中占据侧重要的地位:


  • 第一个副本通常会放置在与客户端上传数据的节点雷同的机架上的某个 DataNode 上(假如客户端位于集群节点上),如此一来可以降低网络传输的开销,提高数据写入的速度。
  • 第二个副本会放置在与第一个副本不同机架的某个节点上,以保障在一个机架出现故障的时间,数据仍旧能够保持可用的状态。
  • 第三个副本会放置在与第二个副本雷同机架的不同节点上,进一步提升数据的可靠性与可用性。
    以一个简朴的集群为例,假设有三个机架分别是 Rack1、Rack2 和 Rack3。客户端 Client 位于 Rack1 上,当它上传一个文件的时间,第一个数据块的副本可能会被存储在 Rack1 的 DataNode1 上,第二个副本可能会被存储在 Rack2 的 DataNode2 上,第三个副本可能会被存储在 Rack1 的 DataNode3 上(但是 DataNode3 与 DataNode1 不在同一服务器上)。
    这种副本放置计谋在确保数据可靠性的同时,也分身了数据的读写性能以及网络带宽的利用服从。当客户端读取数据的时间,可以从间隔最近的副本进行读取,以减少网络延迟。同时,当某个 DataNode 出现故障的时间,系统能够自动从其他副本读取数据,确保数据的可用性。
三、数据写入流程

(一)客户端请求

当客户端想要向 HDFS 写入一个文件的时间,首先会向 NameNode 发起创建文件的请求。请求当中包罗文件名、文件权限等元数据信息。
(二)NameNode 相应

NameNode 接收到客户端的请求后,会进行一系列的查抄与利用:


  • 首先,查抄文件是否已经存在,假如存在则向客户端返回错误信息。
  • 然后,根据文件的大小以及当前集群的负载状况,确定文件要被分割成的数据块数量以及每个数据块的存储位置(即哪些 DataNode 来存储这些数据块的副本)。NameNode 会选取一些具有足够存储空间的 DataNode,并为每个数据块分配一个唯一的标识符(Block ID)。
  • 最后,NameNode 将这些信息反馈给客户端,包罗每个数据块的目标 DataNode 列表。
(三)数据写入

客户端接收到 NameNode 的相应后,开始按照指定的顺序将数据块写入对应的 DataNode 中。写入过程呈现出流水线式,即客户端会同时向多个 DataNode 发送数据块,以此来提升写入性能。具体步骤如下:

  • 客户端首先将数据块分割成一个个数据包(Packet),每个数据包的大小通常为 64KB。
  • 客户端将第一个数据包发送给第一个 DataNode(DataNode1),DataNode1 接收到数据包后,会将其存储在当地,并立即将该数据包转发给第二个 DataNode(DataNode2),DataNode2 再将其转发给第三个 DataNode(DataNode3),依此类推,形成一个数据传输的流水线。
  • 当客户端发送完一个数据包后,会立即开始发送下一个数据包,而无需等待第一个数据包完全传输至全部的 DataNode。
  • 每个 DataNode 在接收到数据包后,都会向客户端发送一个确认信息(ACK),表现已成功接收该数据包。当客户端收到全部 DataNode 对某个数据包简直认信息后,才会认定该数据包写入成功,然后开始发送下一个数据包。
  • 在数据块写入过程中,假如某个 DataNode 出现故障,客户端会自动从 NameNode 获取新的 DataNode 列表,并重新将数据包发送至新的 DataNode 上,以确保数据的完备性。
(四)副本复制

当第一个数据块写入完成后,客户端会按照雷同的流程将其他数据块写入对应的 DataNode 中。在整个文件写入过程中,DataNode 之间会自动进行副本的复制,以保证每个数据块的副本数量到达指定要求。例如,当 DataNode1 接收到客户端写入的数据块后,它会依据副本计谋,将该数据块复制到其他指定的 DataNode 上。
(五)结束写入

当客户端完成全部数据块的写入后,会向 NameNode 发送一个完成写入的关照。NameNode 接收到关照后,会将文件的元数据信息长期化存储至磁盘上,至此,整个文件写入过程宣告完成。
下面通过一个现实案例进一步说明数据写入流程。假设我们要将一个大小为 500MB 的视频文件上传至 HDFS。客户端首先向 NameNode 发起创建文件的请求,NameNode 确定该文件需要分成 4 个数据块(假设每个数据块大小为 128MB,最后一个数据块大小为 108MB),并为每个数据块分配存储位置,比如数据块 1 的副本要存储在 DataNodeA、DataNodeB 和 DataNodeC 上。客户端开始将数据块 1 分割成数据包并依次发送给 DataNodeA,DataNodeA 一边接收数据包并存储,一边将其转发给 DataNodeB,DataNodeB 再转发给 DataNodeC。在发送过程中,客户端会持续收到 DataNode 简直认信息,确保数据包写入成功。当数据块 1 写入完成后,客户端按照同样的方式写入其他数据块,直至整个文件写入完成。
四、数据读取流程

(一)客户端请求

当客户端要读取 HDFS 上的一个文件时,首先会向 NameNode 发送一个读取文件的请求,请求中包罗文件名。
(二)NameNode 相应

NameNode 接收到客户端的请求后,会根据文件名查找对应的元数据信息,包罗文件的数据块列表以及每个数据块的位置信息(即存储该数据块副本的 DataNode 列表)。NameNode 将这些信息返回给客户端。
(三)客户端读取数据

客户端接收到 NameNode 的相应后,会根据数据块的位置信息选择一个间隔最近的 DataNode 来读取数据块。读取过程如下:

  • 客户端向选定的 DataNode 发送一个读取数据块的请求。
  • DataNode 接收到请求后,将相应的数据块读取出来,并以数据包的形式发送给客户端。每个数据包通常也为 64KB 大小。
  • 客户端在接收到数据包后,会进行校验和验证,以确保数据的完备性。若校验和不匹配,说明数据在传输过程中可能出现错误,客户端会向 DataNode 请求重新发送该数据包。
  • 客户端按照顺序依次读取每个数据块,直至整个文件读取完成。
    在读取过程中,假如客户端发现所选的 DataNode 出现故障大概无法正常提供数据,它会自动从 NameNode 获取新的 DataNode 列表,并从其他可用的 DataNode 上读取数据块。
    例如,假设客户端要读取一个存储在 HDFS 上的图片文件,NameNode 返回的信息显示该文件的数据块 1 的副本存储在 DataNodeX、DataNodeY 和 DataNodeZ 上,客户端通过网络间隔等因素判定 DataNodeX 间隔最近,于是向 DataNodeX 发送读取请求。DataNodeX 将数据块 1 以数据包的形式发送给客户端,客户端在接收过程中进行校验和验证,确保数据精确后继承读取下一个数据包,直至数据块 1 读取完成。然后按照同样的方式读取其他数据块,终极完成整个文件的读取。
五、总结

HDFS 的数据存储机制和读写流程是其实现高效、可靠、可扩展的大数据存储和处置惩罚的关键要素。通过将文件分割成数据块并采用多副本存储计谋,HDFS 确保了数据的可靠性和可用性,同时也提高了数据的读写性能和并发处置惩罚能力。在现实应用中,深入理解 HDFS 的这些原理和流程对于优化大数据应用、办理可能出现的题目以及充分发挥 HDFS 的优势具有庞大意义。无论是进行大规模数据存储、数据分析还是数据发掘等工作,掌握 HDFS 的工作原理都是不可或缺的基础。希望本文通过原理结合实例的讲解,能够资助读者对 HDFS 有更深入的理解和认识,为在大数据范畴的进一步学习和实践奠基坚实的基础。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

玛卡巴卡的卡巴卡玛

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表