Hadoop分布式文件系统(HDFS)是Apache Hadoop生态系统的核心组件之一,它是一种设计用于存储和处理超大规模数据集的分布式文件系统。
HDFS是一个分布式文件系统,它将大文件切分成多个小文件存储在不同的计算机节点上,因此可以存储大规模的非结构化数据,例如文本、图像、音频和视频等。
HDFS中的数据以文件的形式存储,每个文件都被划分成多个块(block),通常是64MB或128MB,这些块被分配给不同的节点datanode进行存储。每个块都会有多个备份,以保证数据的可靠性和高可用性
因此,HDFS的存储方式更适合存储大规模的非结构化数据,而不是结构化的数据
HDFS由以下两个组件构成:
-
NameNode:NameNode是HDFS的主要组件之一,它存储了整个文件系统的元数据,包括文件、目录、文件权限、文件块的位置等信息。NameNode维护着整个文件系统的命名空间和数据块的映射关系,同时也负责管理数据块的复制和移动。因为NameNode存储着整个文件系统的元数据,所以它的高可用性是HDFS的一个重要问题。
-
DataNode:DataNode是HDFS中的另一个组件,它是存储数据块的节点,它的主要工作是存储和检索数据块,并向NameNode发送块的位置信息。当客户端请求读取数据时,DataNode会将数据块发送给客户端,而当客户端写入数据时,DataNode会将数据块存储在本地磁盘上,并向NameNode发送块的位置信息。一个数据块通常会被存储在多个DataNode上,以提高数据的可靠性和可用性【包含多个block】
HDFS工作流程:
HDFS的工作流程可以进一步细分为以下步骤:
- 文件写入过程:
- 用户向客户端发送写入请求,客户端将请求发送给HDFS的NameNode。
- NameNode检查文件是否存在,如果不存在则创建一个新的文件记录,并返回一个文件描述符(file descriptor)给客户端。
- 客户端根据文件描述符与DataNode建立连接。
- 客户端将数据分成块(block),每个块的默认大小为128MB(可配置),并将每个块写入到DataNode上。客户端也将块的元数据信息(块ID、块所在的DataNode地址等)发送给NameNode。
- NameNode记录块与DataNode的关系,以及块所在的DataNode地址,并返回成功写入的响应给客户端。
- 文件读取过程:
- 用户向客户端发送读取请求,客户端将请求发送给HDFS的NameNode。
- NameNode返回文件的元数据信息(包括块的数量、块的ID和块所在的DataNode等信息)给客户端。
- 客户端通过块的元数据信息与相应的DataNode建立连接,并读取数据块。
- 客户端将所有的块组装在一起,并返回数据给用户。
在这个过程中,Metadata Operations(元数据操作)是指NameNode所进行的操作,包括记录文件的属性(例如文件名、大小、修改时间等)以及块的元数据(例如块ID、块所在的DataNode地址等)。
Block Operations(块操作)是指DataNode所进行的操作,包括块的读写、复制、删除等。
结构化、半结构化和非结构化数据是根据数据的组织方式和格式来区分的。
结构化数据是指具有固定结构、可以用表格或关系型数据库进行存储、管理和处理的数据,通常采用行和列的形式进行组织。例如,订单、客户、产品和销售记录等数据都是结构化数据。
半结构化数据则是一种类似于结构化数据的数据组织形式,但是具有更灵活的结构,没有严格的模式定义。半结构化数据通常是以XML、JSON、YAML等格式进行组织,可以用于描述和交换数据。例如,网页、电子邮件和传感器数据等都是半结构化数据。
非结构化数据则是指没有固定格式或结构的数据,通常不适合用关系型数据库进行存储和处理,也难以用表格或其他形式的数据结构进行组织。例如,音频、视频、图像、文本文件等都是非结构化数据。非结构化数据通常需要特殊的工具和技术进行处理和分析,如自然语言处理、图像分析和机器学习等
将大文件切割然后存储,怎么再次找到呢
在 HDFS 中,一个大文件被切成多个块(默认大小为 128 MB),然后这些块被存储在不同的数据节点上。每个块会有一个唯一的标识符(Block ID)和一个副本数量,这些信息会记录在 HDFS 的 NameNode 上。客户端访问 HDFS 时,会首先向 NameNode 发送文件请求,然后 NameNode 返回文件的元数据,包括文件所在的块以及块所在的数据节点信息。客户端再根据这些信息直接从数据节点读取所需数据块,最终将这些块组合成完整的文件。因此,HDFS 通过数据块的复制、分布和元数据管理,保证了高可靠性和可扩展性
HDFS和Hbase的区别
HDFS和HBase都是Hadoop生态系统中的分布式存储系统,但它们有一些区别。
HDFS是一种分布式文件系统,专门用于存储和处理大数据集,它的设计重点是高可靠性、高容错性和高性能。它通过将数据块复制到多个节点来实现数据的冗余备份,保证了数据的可靠性和容错性。而且,HDFS适合存储大文件,因为它的读写速度非常快,但不适合小文件存储。
相比之下,HBase是一种分布式的、面向列的NoSQL数据库,它是建立在HDFS之上的,具有高可扩展性和高可用性。HBase是非关系型数据库,数据存储在列族中,每个列族可以包含多个列,而且列可以动态增加,它适合存储非结构化和半结构化的数据,支持实时读写和随机访问。
总的来说,HDFS适合存储大文件,而HBase适合存储半结构化或非结构化的数据,并支持实时读写和随机访问。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!