HDFS 基于开源框架构建,是 Apache Hadoop 的主要组件之一,其他组件包括 MapReduce 和 YARN。HDFS 不应与 Apache HBase 混淆,也不应被其取代。Apache HBase 是一种面向列的非关系型数据库管理系统,它位于 HDFS 之上,可通过其内存处理引擎更好地支持实时数据需求。
HDFS 主要用于批处理而非交互式使用,因此设计的重点是高数据吞吐率,以适应数据集的流式访问。
HDFS 可容纳使用通常从 GB 到 TB 大小的数据集的应用程序。HDFS 提供高聚合数据带宽,可以在单个聚类中扩展到数百个节点,并有助于驱动高性能计算 (HPC) 系统。数据湖通常存储在 HDFS 上。数据仓库也使用过 HDFS,但由于意识到操作的复杂性,现在使用得较少。
由于数据是虚拟存储的,因此,可以降低文件系统元数据和文件系统命名空间数据存储的成本。
HDFS 使用聚类架构来帮助提供高吞吐量。为减少网络流量,Hadoop 文件系统将数据存储在进行计算的数据节点,而不是将数据移动到其他位置进行计算。
凭借可横向和纵向扩展的功能,HDFS 可以快速进行调整,以适应组织的数据需求。一个集群可能包含数百或数千个节点。
HDFS 具有 Director/Worker 架构。
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,帮助防止在整个机架发生故障时丢失数据。这还可以在读取数据时使用来自多个机架的带宽。
假设有一个包含整个国家电话号码的文件。姓氏以 A 开头的人的号码可能存储在服务器 1 上,以 B 开头的人的号码存储在服务器 2 上,以此类推。使用 Hadoop,该电话簿的各个片断将存储在单个集群中,而要重建整个电话簿,应用程序将需要集群中每个服务器的数据块。
为了在服务器出现故障时帮助确保高可用性,HDFS 默认将这些较小的片段复制到另外两台服务器上。(可以基于每个文件或为整个环境增加或减少此冗余。例如,开发 Hadoop 集群通常不需要任何数据冗余。)
这种冗余还让 Hadoop 集群能够将工作分解为更小的块,并在集群中的所有服务器上运行这些作业,以提高可扩展性。最后,企业还能获得数据本地化的好处,这在处理大型数据集时至关重要。
HDFS 还可以通过有效扩展来支持人工智能 (AI) 和机器学习 (ML)。首先存储训练 ML 模型所需的足够大量的数据,然后访问这些庞大的数据集。
任何捕获、存储和使用大型数据集(高达 PB 级)的组织都可以考虑使用 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管理,这是一个面向软件开发人员和软件贡献者的全球性社区。
设计数据战略,消除数据孤岛、降低复杂性并提高数据质量,以获得卓越的客户和员工体验。
watsonx.data 支持您通过开放、混合和已治理数据,利用您的所有数据(无论位于何处)来扩展分析和 AI。
通过 IBM® Consulting 发掘企业数据的价值,建立以洞察分析为导向的组织,实现业务优势。