什么是 Hadoop 分布式文件系统 (HDFS)?

2024 年 6 月 14 日

作者

什么是 HDFS?

Hadoop 分布式文件系统 (HDFS) 是一种管理大型数据集的文件系统,可在商用硬件上运行。HDFS 是 Hadoop 最常用的数据存储系统,可用于将单个 Apache Hadoop 集群扩展到数百甚至数千个节点。 由于 HDFS 能以高吞吐量有效管理大数据,因此可用作数据管道,非常适合支持复杂的数据分析

HDFS 基于开源框架构建,是 Apache Hadoop 的主要组件之一,其他组件包括 MapReduceYARN。HDFS 不应与 Apache HBase 混淆,也不应被其取代。Apache HBase 是一种面向列的非关系型数据库管理系统,它位于 HDFS 之上,可通过其内存处理引擎更好地支持实时数据需求。

小球在轨道上滚动的三维设计

最新的 AI 新闻 + 洞察分析

在每周的 Think 时事通讯中,发现专家精选的有关 AI、云等的洞察分析和新闻。 

HDFS 的优势

容错和从硬件故障中快速恢复

由于一个 HDFS 实例可能由数千台服务器组成,因此,至少有一台服务器始终有可能发生故障。HDFS 可检测故障并自动快速恢复。跨多个节点制作多份数据复制副本有助于防止数据丢失。HDFS 将至少一个副本保留在与所有其他副本不同的机架上。跨节点的大型集群中的此类数据存储提高了可靠性。此外,HDFS 还可以拍摄存储快照来保存时间点 (PIT) 信息。

访问流数据

HDFS 主要用于批处理而非交互式使用,因此设计的重点是高数据吞吐率,以适应数据集的流式访问。

容纳大型数据集

HDFS 可容纳使用通常从 GB 到 TB 大小的数据集的应用程序。HDFS 提供高聚合数据带宽,可以在单个聚类中扩展到数百个节点,并有助于驱动高性能计算 (HPC) 系统。数据湖通常存储在 HDFS 上。数据仓库也使用过 HDFS,但由于意识到操作的复杂性,现在使用得较少。

成本效益

由于数据是虚拟存储的,因此,可以降低文件系统元数据和文件系统命名空间数据存储的成本。

可移植性

为了方便采用,HDFS 被设计为可在多个硬件平台上移植,并兼容各种底层操作系统,包括 Linux、macOS 和 Windows。此外,Hadoop 数据湖还能支持非结构化、半结构化和结构化数据库,从而获得极高的灵活性。虽然 Hadoop 是用 Java 编写的,但其他语言(包括 C++、Perl、Python 和 Ruby)也支持它在数据科学中的应用。

处理速度

HDFS 使用聚类架构来帮助提供高吞吐量。为减少网络流量,Hadoop 文件系统将数据存储在进行计算的数据节点,而不是将数据移动到其他位置进行计算。

可扩展性

凭借可横向和纵向扩展的功能,HDFS 可以快速进行调整,以适应组织的数据需求。一个集群可能包含数百或数千个节点。

AI Academy

数据管理是生成式 AI 的秘诀吗?

深入了解为什么高质量数据对于成功使用生成式 AI 至关重要。

HDFS 架构及其工作原理

HDFS 具有 Director/Worker 架构。

  • 一个 HDFS 聚类包含有一个名称节点,即 Director 服务器。名称节点会跟踪所有文件的状态、文件权限和每个块的位置。名称节点软件可以管理文件系统命名空间,进而跟踪和控制客户端对文件的访问,以及执行文件打开、关闭和目录及文件重命名等操作。

    文件系统命名空间还将文件划分为多个块,并将块映射到数据节点,也就是系统的 Worker 部分。系统架构在每个聚类只配置一个名称节点,通过这种方式简化了数据管理和 HDFS 元数据的存储。此外,由于能够防止数据通过名称节点流动,还能提高安全性。

  • 集群中的每个节点通常都有一个数据节点,管理着节点内的数据存储。数据节点软件管理着数据块的创建、删除和复制,以及读写请求。每个数据节点将 HDFS 数据单独存储在其本地文件系统中,每个块作为单独的文件。数据节点是 Worker 节点(或 Hadoop 守护进程,即在后台运行的进程),如果组织希望节约成本,可以在商用硬件上运行。

NameNode 和 DataNode 都是为在各种操作系统上运行而编写的软件,通常是 GNU/Linux 操作系统。构建 HDFS 时使用了 Java 语言,这意味着任何支持 Java 的机器也可以使用 NameNode 或 DataNode 软件。

部署通常有一台运行 NameNode 软件的专用机器。然后,集群中的任何其他计算机均可运行 DataNode 软件的单个实例。如果需要,但不经常使用,可以在一台机器上配置多个 DataNode。

当数据进入 HDFS 时,它被分解为多个块,并分发到集群中的不同节点。当数据存储在多个 DataNode 中时,可将数据块复制到其他节点,实现并行处理。分布式文件系统 (DFS) 包括快速访问、检索、移动和查看数据的命令。利用跨多个 DataNode 的数据块副本,可以删除一个副本,而不会冒其他副本文件损坏的风险。默认的 HDFS 块大小为 128 MB (Hadoop 2.x),有些人会认为这个值太大了,但这样做是为了最大限度地缩短寻道时间并减少所需的元数据。

为了最大限度地降低风险并加快处理速度,当一个 DataNode 停止向 NameNode 发出信号时,该 DataNode 将从集群中被删除,并且操作无需该 DataNode 即可继续。如果该 DataNode 稍后变为正常运行状态,则会将其分配给新的集群。

HDFS 通过各种接口提供灵活的数据访问文件:HDFS 附带有一个原生 Java API,同时为该 Java API 提供 C 语言包装;还可以使用 HTTP 浏览器来浏览 HDFS 实例的文件。

文件系统命名空间

HDFS 按传统的文件层次结构进行组织,用户可以在其中创建包含多个文件的目录。文件系统命名空间的层次结构类似于传统文件系统,用户可以创建和删除文件、在目录之间移动文件以及重命名文件。

文件系统命名空间由 NameNode 维护,NameNode 维护文件系统命名空间中任何更改的记录。可以在此处指定要为任何应用程序保存的副本总数。此数字是相关文件的复制因子。复制因子可以在创建文件时设置,并可在以后根据需要进行修改。

数据复制

为了提供可靠的存储,HDFS 将大型文件存储在大型集群中的多个位置,每个文件都存储在一系列块中。各块都存储在相同大小的文件中,但最后一个块除外,它会随着数据的添加而填充。

为了强化保护,HDFS 文件只能由一名写入者在任何时间一次性写入,帮助确保所有数据都按照指示进行复制。NameNode 从连接到集群的每个 DataNode 接收“心跳”(定期状态报告)和块报告(块 ID、生成戳和每个块副本的长度)。接收到心跳就表明 DataNode 正常工作。

NameNode 使用一种名为“Hadoop 机架感知”的过程为每个 DataNode 选择机架 ID,帮助防止在整个机架发生故障时丢失数据。这还可以在读取数据时使用来自多个机架的带宽。

HDFS 示例和用例

假设有一个包含整个国家电话号码的文件。姓氏以 A 开头的人的号码可能存储在服务器 1 上,以 B 开头的人的号码存储在服务器 2 上,以此类推。使用 Hadoop,该电话簿的各个片断将存储在单个集群中,而要重建整个电话簿,应用程序将需要集群中每个服务器的数据块。

为了在服务器出现故障时帮助确保高可用性,HDFS 默认将这些较小的片段复制到另外两台服务器上。(可以基于每个文件或为整个环境增加或减少此冗余。例如,开发 Hadoop 集群通常不需要任何数据冗余。)

这种冗余还让 Hadoop 集群能够将工作分解为更小的块,并在集群中的所有服务器上运行这些作业,以提高可扩展性。最后,企业还能获得数据本地化的好处,这在处理大型数据集时至关重要。

HDFS 还可以通过有效扩展来支持人工智能 (AI)机器学习 (ML)。首先存储训练 ML 模型所需的足够大量的数据,然后访问这些庞大的数据集。

任何捕获、存储和使用大型数据集(高达 PB 级)的组织都可以考虑使用 HDFS。一些行业用例展示了如何实施 HDFS。

  • 能源:在使用相量测量单元 (PMU) 来监控输电网络中智能电网的性能时,电力公司可能会以每秒数千条的速度积累大量数据。HDFS 可能是他们所需的可以信赖、经济高效且高度可用的文件系统。

  • 医疗保健:医疗记录的数量每天都在增长。可以高效收集和存储医疗设备和患者传感器数据,以便进行更有针对性的治疗和研究。

  • 营销:需要收集来自客户关系管理 (CRM) 系统、销售点 (PoS) 系统、活动响应和社交媒体的数据(其中大部分是非结构化的),以便进行分析,并由此指导未来的营销工作。HDFS 集群可能会为存储和分析所生成的大量数据提供节省预算的解决方案。

  • 石油和天然气:HDFS 集群有助于统一以各种格式收集的所有数据,使其可用于大数据分析。这可以包括从三维地球模型到视频、客户采购或设备传感器数据等一切内容。

  • 零售:为了更好地了解客户,零售商可以从多个来源收集和分析数据。这包括销售记录、客户服务互动和社交媒体,涵盖非结构化数据和结构化数据,用于制定新的沟通策略。

  • 电信:HDFS 可以帮助电信企业构建稳健的网络路径、进行预测性维护、指示有前景的网络扩展选项并分析客户行为。

HDFS 的历史

根据联合创始人 Mike Cafarella 和 Doug Cutting 的说法,Hadoop 的起源是 2003 年发表的一篇 Google File System 论文。随后又发表了第二篇论文《MapReduce:简化大型集群上的数据处理》。 随后,我们开始开发名为 Apache Nutch 的早期搜索引擎,但随后于 2006 年 Doug Cutting 将该工作转移到了 Yahoo。

Hadoop 以 Cutting 儿子的玩具大象命名。(徽标由此而来。)最初的 Hadoop 代码主要基于 Nutch,但克服了其可扩展性限制,并包含早期版本的 HDFS 和 MapReduce。

Hadoop 生态系统中的程序套件持续增长。除了 HDFS 之外,还有:HBase(一种 NoSQL 数据库)、Mahout、Spark MLLib(用于机器学习的算法库)、MapReduce(基于编程的数据处理)、Oozie(作业调度器)、PIG 和 HIVE(基于查询的数据处理服务)、Solar 和 Lucene(用于搜索和索引)、Spark(数据处理、内存中)、YARN(Yet Another Resource Negotiator)和 Zookeeper(集群协调)。

Hadoop 生态系统中的开源软件目前由 Apache 软件基金会1管理,这是一个面向软件开发人员和软件贡献者的全球性社区。

相关解决方案
数据管理软件和解决方案

设计数据战略,消除数据孤岛、降低复杂性并提高数据质量,以获得卓越的客户和员工体验。

深入了解数据管理解决方案
IBM watsonx.data™

watsonx.data 支持您通过开放、混合和已治理数据,利用您的所有数据(无论位于何处)来扩展分析和 AI。

了解 watsonx.data
数据和分析咨询服务

通过 IBM® Consulting 发掘企业数据的价值,建立以洞察分析为导向的组织,实现业务优势。

了解分析服务
采取下一步行动

设计数据战略,消除数据孤岛、降低复杂性并提高数据质量,以获得卓越的客户和员工体验。

深入了解数据管理解决方案 了解 watsonx.data