返回介绍

2.1 HDFS

发布于 2024-09-24 23:25:31 字数 3762 浏览 0 评论 0 收藏 0

简介

Hadoop 分布式文件系统(Hadoop Distributed File System)能提供高吞吐量的数据访问,适合大规模数据集方面的应用,为海量数据提供存储,提供类 POSIX 接口。

结构

HDFS 包含主、备 NameNode 和多个 DataNode,如 图 1 所示。

HDFS 是一个 Master/Slave 的架构,在 Master 上运行 NameNode,而在每一个 Slave 上运行 DataNode,ZKFC 需要和 NameNode 一起运行。

NameNode 和 DataNode 之间的通信都是建立在 TCP/IP 的基础之上的。NameNode、DataNode、ZKFC 和 JournalNode 能部署在运行 Linux 的服务器上。

image-20191205204348941

图 HA HDFS 结构

图 1 中各模块的功能说明如 表 1 所示。

表格 7 HDFS 模块说明

名称描述
NameNode用于管理文件系统的命名空间、目录结构、元数据信息以及提供备份机制等,分为: Active NameNode:管理文件系统的命名空间、维护文件系统的目录结构树以及元数据信息;记录写入的每个“数据块”与其归属文件的对应关系。 Standby NameNode:与 Active NameNode 中的数据保持同步;随时准备在 Active NameNode 出现异常时接管其服务。
DataNode用于存储每个文件的“数据块”数据,并且会周期性地向 NameNode 报告该 DataNode 的数据存放情况。
JournalNodeHA 集群下,用于同步主备 NameNode 之间的元数据信息。
ZKFCZKFC 是需要和 NameNode 一一对应的服务,即每个 NameNode 都需要部署 ZKFC。它负责监控 NameNode 的状态,并及时把状态写入 Zookeeper。ZKFC 也有选择谁作为 Active NameNode 的权利。
ZK ClusterZooKeeper 是一个协调服务,帮助 ZKFC 执行主 NameNode 的选举。
HttpFS gatewayHttpFS 是个单独无状态的 gateway 进程,对外提供 webHDFS 接口,对 HDFS 使用 FileSystem 接口对接。可用于不同 Hadoop 版本间的数据传输,及用于访问在防火墙后的 HDFS(HttpFS 用作 gateway)。

HDFS 原理

HDFS 的原理如 图 2 所示。

image-20191205204459988

图 HDFS 原理

在 HDFS 内部,一个文件分成一个或多个“数据块”,这些“数据块”存储在 DataNode 集合里,NameNode 负责保存和管理所有的 HDFS 元数据。客户端连接到 NameNode,执行文件系统的“命名空间”操作,例如打开、关闭、重命名文件和目录,同时决定“数据块”到具体 DataNode 节点的映射。DataNode 在 NameNode 的指挥下进行“数据块”的创建、删除和复制。客户端连接到 DataNode,执行读写数据块操作。

  • HDFS HA 架构

HA 即为 High Availability,用于解决 NameNode 单点故障问题,该特性通过主备的方式为主 NameNode 提供一个备用者,一旦主 NameNode 出现故障,可以迅速切换至备 NameNode,从而不间断对外提供服务。

在一个典型 HDFS HA 场景中,通常由两个 NameNode 组成,一个处于 Active 状态,另一个处于 Standby 状态。

为了能实现 Active 和 Standby 两个 NameNode 的元数据信息同步,需提供一个共享存储系统。本版本提供基于 QJM(Quorum Journal Manager)的 HA 解决方案,如 图 3 所示。主备 NameNode 之间通过一组 JournalNode 同步元数据信息。

通常配置奇数个(2N+1 个)JournalNode,且最少要运行 3 个 JournalNode。这样,一条元数据更新消息只要有 N+1 个 JournalNode 写入成功就认为数据写入成功,此时最多容忍 N 个 JournalNode 写入失败。比如,3 个 JournalNode 时,最多允许 1 个 JournalNode 写入失败,5 个 JournalNode 时,最多允许 2 个 JournalNode 写入失败。

由于 JournalNode 是一个轻量级的守护进程,可以与 Hadoop 其它服务共用机器。建议将 JournalNode 部署在控制节点上,以避免数据节点在进行大数据量传输时引起 JournalNode 写入失败。

image-20191205204542571

图 3 基于 QJM 的 HDFS 架构

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文