在 Hadoop 生态系统中, Hadoop 分布式文件系统 (HDFS) 是非常关键的一环, 它为管理大数据资源池和支撑相关大数据分析应用提供了一个具有高可靠性的工具. 在分布式存储领域, HDFS 也扮演着重要角色, 是作为系统架构师必须了解的分布式文件系统之一.
HDFS 的工作原理
HDFS 支持在计算节点之间快速传输数据. 在开始阶段, 它与 MapReduce 紧密耦合 --MapReduce 是一个用于大规模数据集的并行运算的编程框架.
当 HDFS 接收数据时, 会将信息分解为单独的块, 并将它们分布到集群中的不同节点, 从而支持高效的并行处理.
此外, HDFS 专门设计有高容错的特性. HDFS 可以多次复制每个数据片段, 并将副本分发给各个节点, 将至少一个副本放在其他服务器机架上. 因此, 在集群中的其他地方也可以找到崩溃节点上的数据. 这确保了在恢复数据时可以继续进行处理.
HDFS 使用主 / 从架构. 在其最初版本中, 每个 Hadoop 集群由一个 NameNode(用于管理文件系统运行)和支持 DataNode(用于管理单个计算节点上的数据存储)组成. 这些 HDFS 元素结合起来, 可支持具有大数据集的应用程序.
这个主节点 "数据分块" 架构, 从谷歌文件系统 (GFS) 以及 IBM 的通用并行文件系统 (GPFS) 中吸取了部分设计指导元素. GFS 是一个可扩展的分布式文件系统, 用于大型的, 分布式的, 对大量数据进行访问的应用. 它运行于廉价的普通硬件上, 并提供容错功能, 可以给大量的用户提供总体性能较高的服务. GPFS 是一种专门为集群环境设计的高性能, 可扩展的并行文件系统, 可以在集群中的多个节点间实现对共享文件系统中文件的快速存取操作, 并提供稳定的故障恢复和容错机制. 此外, 虽然 HDFS 不是与可移植操作系统接口 (POSIX) 的模型兼容的, 但它在某些方面也与 POSIX 设计风格相呼应.
HDFS 架构图 - 应用程序通过 Client 与 NameNode 和 DataNode 进行交互
为什么要使用 HDFS
HDFS 最早出自雅虎, 用于满足该公司广告服务和搜索引擎的部分需求. 与其他面向 web 的公司一样, 雅虎发现自己需要处理的应用程序的用户访问越来越多, 而这些用户正在产生越来越多的数据. 后来, Facebook,eBay 和 Twitter 等公司也开始使用 HDFS 作为大数据分析的基础, 来解决相同的需求.
但 HDFS 的用途远不止于此. 上述所提到的大规模 Web 搜索, 我们可以将其归类于数据密集型并行计算. 此外, HDFS 也常用于计算密集型并行计算应用场景, 如气象计算. 在数据密集与计算密集混合型场景中也多有应用, 如 3D 建模与渲染. HDFS 也是许多开源数据仓库 (有时称为数据湖, Data Lake) 的核心.
HDFS 通常用于大规模部署, 因为它具备一个重要特性, 就是可运行在普通廉价机器上. 还有, 例如运行 Web 搜索和相关应用程序的这种系统, 往往需要可以扩展到数百 PB 和数千个节点, 因此系统必须拥有易于扩展的特性, 这正是 HDFS 所具备的. 此外, 服务器故障在这种规模下很常见, HDFS 所提供的容错能力在这方面也很有实际价值.
不适用于 HDFS 的场景
首先, HDFS 不适用于对延迟要求较高的场景, 如实时查询. 在延迟方面, HDFS 没有充分的优势. 其次, HDFS 也难以支持大量小文件的存储. 在 Hadoop 系统中, 通常将 "小文件" 定义为远小于 HDFS 的 block size(默认 64MB)的文件, 由于每个文件都会产生各自的 MetaData 元数据, Hadoop 通过 Namenode 来存储这些信息, 若小文件过多, 容易导致占用大量 NameNode 内存, 也会使寻道时间超过读取时间, 为系统带来性能瓶颈.
此外, HDFS 不支持多用户写入, 也无法进行文件随机修改. 仅支持以 append 的方式, 即通过追加的方式添加到文件结尾处. HDFS 适用于存储半结构化和非结构化数据, 若有数据严格的结构化特性, 强行采用 HDFS 是不合适的. 最后, HDFS 适用于 TB,PB 级的大数据处理, 文件数量通常在百万以上, 如果数据量很小, 完全没有必要采用 HDFS.
HDFS 和 Hadoop 的历史
这里简要说一些关键的时间节点. 2006 年, Apache Hadoop 项目正式启动, HDFS 和 MapReduce 开始独立发展. 该软件开始广泛应用于各行各业的大数据分析项目中. 2012 年, HDFS 和 Hadoop 版本 1.0 发布.
2013 年 Hadoop 2.0 版本加入了通用 YARN 资源管理器, MapReduce 和 HDFS 有效解耦. 此后, Hadoop 支持各种数据处理框架和文件系统. 虽然 MapReduce 经常被 Apache Spark 所替代, 但 HDFS 仍然是 Hadoop 的一种流行的文件格式.
在发布了四个 alpha 版本和一个 beta 版本之后, Apache Hadoop 3.0.0 在 2017 年 12 月开始普遍可用, HDFS 增强支持额外的 NameNode, 擦除编码工具和更大的数据压缩. 与此同时, HDFS 工具, 如 LinkedIn 的开源 Dr. Elephant 和 Dynamometer 性能测试工具的进步, 也使 HDFS 能够支持更进一步的开发实现.
来源: http://stor.51cto.com/art/201810/584790.htm