2.1 HDFS
简介
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 的服务器上。
图 HA HDFS 结构
表格 7 HDFS 模块说明
名称 | 描述 |
---|---|
NameNode | 用于管理文件系统的命名空间、目录结构、元数据信息以及提供备份机制等,分为: Active NameNode:管理文件系统的命名空间、维护文件系统的目录结构树以及元数据信息;记录写入的每个“数据块”与其归属文件的对应关系。 Standby NameNode:与 Active NameNode 中的数据保持同步;随时准备在 Active NameNode 出现异常时接管其服务。 |
DataNode | 用于存储每个文件的“数据块”数据,并且会周期性地向 NameNode 报告该 DataNode 的数据存放情况。 |
JournalNode | HA 集群下,用于同步主备 NameNode 之间的元数据信息。 |
ZKFC | ZKFC 是需要和 NameNode 一一对应的服务,即每个 NameNode 都需要部署 ZKFC。它负责监控 NameNode 的状态,并及时把状态写入 Zookeeper。ZKFC 也有选择谁作为 Active NameNode 的权利。 |
ZK Cluster | ZooKeeper 是一个协调服务,帮助 ZKFC 执行主 NameNode 的选举。 |
HttpFS gateway | HttpFS 是个单独无状态的 gateway 进程,对外提供 webHDFS 接口,对 HDFS 使用 FileSystem 接口对接。可用于不同 Hadoop 版本间的数据传输,及用于访问在防火墙后的 HDFS(HttpFS 用作 gateway)。 |
HDFS 原理
HDFS 的原理如 图 2 所示。
图 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 写入失败。
图 3 基于 QJM 的 HDFS 架构
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论