加入收藏 | 设为首页 | 会员中心 | 我要投稿 温州站长网 (https://www.0577zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

大数据系列 2:分布式文件系统 HDFS

发布时间:2022-11-21 15:36:02 所属栏目:大数据 来源:网络
导读: HDFS 高可用 (High Availability,HA)
NameNode 节点中存储有以下两个文件,存储重要的元数据信息。 - fsimage: NameNode 的快照,元数据的镜像,包含了文件系统中的所有目录和文件inode

HDFS 高可用 (High Availability,HA)

NameNode 节点中存储有以下两个文件,存储重要的元数据信息。 - fsimage: NameNode 的快照,元数据的镜像,包含了文件系统中的所有目录和文件inode的序列化信息 - edits: 记录文件系统的改动

NameNode 把对文件系统的修改存储到 edits 中,启动时从 fsimage 读取文件状态,从 edits 应用编辑操作,随着 edits 越来越大,NameNode 的启动时间会变长。

在 Hadoop 2.X 之前有 Secondary NameNode,按一定规则将 edits 文件和 fsimage 文件合并,合并后 NameNode 会启用新的 edits 文件,这样会减小 edits 文件的文件大小,控制 edits 文件的大小会减少 NameNode 在启动阶段解析加载 edits 文件的时长。

但是,在 hadoop2.0 之前,NameNode 只有一个,存在单点问题(虽然 Hadoop1.0 有secondary NameNode,checkpointnode,buckcupnode 这些,但是单点问题依然存在),在 hadoop2.0 引入了 HA 机制。

Hadoop 2.X 引入 Active NameNode 和 Standby NameNode ,提供主备切换避免单点故障。HA 其本质上就是要保证主备 NN 元数据一致,即保证 fsimage 和 edits 在备 NN 上也是完整的。元数据的同步很大程度取决于 edits 的同步,而这步骤的关键就是共享文件系统。提供两种方式。

NFS 网络共享文件系统的方式

提供共享文件的 NAS 设备。NFS 作为 Active NameNode 和 Standby NameNode 之间数据共享的存储。Active NameNode 会把最近的 edits 文件写到 NFS,而 Standby NameNode 从 NFS 中把数据读过来。这个方式的缺点是,如果 Active NameNode 或者 Standby NameNode 有一个和 NFS 之间网络有问题,则会造成他们之前数据的同步出问题。

QJM(Quorum Journal Manager )方式

QJM 由JournalNode(JN)组成,一般是奇数点结点组成。每个 JournalNode 对外有一个简易的 RPC 接口,以供 NameNode 读写 edits 到 JN 本地磁盘。当写 edits 时,NameNode 会同时向所有 JournalNode 并行写文件,只要有 N/2+1 结点写成功则认为此次写操作成功,遵循 Paxos 协议。

JN日志节点是一个轻量级的,所以可以和Hadoop的其他守护线程放在一起,不需要额外设备。

完成 HA 除了元数据的同步,还需要一个完善的主备选举切换机制,依赖于 Zookeeper。

关于 HA 详细内容可参考:

HDFS 联邦(Federation)

如下图 HDFS 有两个重要层级,命名空间(Namespace)和 块存储服务(Block Storage)。但是之前介绍的 HDFS 结构都是单 NameNode 的(注意上文说得 HA 并不提供 Namespace 的扩展),单 NameNode 命名空间受限,整个 HDFS 文件系统的吞吐量受限于单个 NameNode 的吞吐量,比如存储大量小文件时,NameNode 会越来越大,并且单个 NameNode 无法隔离应用程序。

大数据存储系统_大数据存储分析_服务器数据存储用什么系统

联邦 HDFS 提供了扩展命名空间的策略,如下图所示。

服务器数据存储用什么系统_大数据存储分析_大数据存储系统

块池(Block Pool)

一个块池是一系列属于单个命名空间的块集合大数据存储系统,DataNodes 为集群中的所有块池存储块。每个块池都是独立管理。这就允许命名空间为新块生成 Block IDs 时不需要与其他命名空间协调。一个 NameNode 故障不会阻止 DataNode 为集群中的其他 NameNodes 提供服务。

一个命名空间和它的块池一起被称为命名空间卷(Namespace Volume)。命名空间卷是一个独立的自我管理单位。当一个 NameNode/namespace 被删除时,对应的在 DataNodes 上的块池也会被删除。在集群升级期间,每个命名空间卷作为一个单元来进行升级。

ClusterID

ClusterID 用于标识集群中所有的节点。当一个 NameNode 被格式化时,ClusterID 就会人工提供或者自动生成,同时这个 ID 用于将剩余其他 NameNode 格式化到集群中。

HDFS 联邦的主要好处:

命名空间可扩展 - 联邦增加了命名空间的水平扩展性。大型部署或使用大量小文件的部署使用命名空间扩展可以允许将更多 NameNodes 添加到集群中,这对于大型部署或使用大量小文件部署是非常有益的(这样就能避免单 个NameNode 内存有限的问题)。性能 - 文件系统吞吐量将不受单个名称节点的限制。向集群添加更多NameNode可扩展文件系统读/写的吞吐量。隔离 - 单个 NameNode 在多用户环境中不提供隔离。例如,一个实验应用程序可能会使 NameNode 过载,并降低主要应用程序的速度。通过使用多个 NameNode,可以将不同类别的应用程序和用户隔离到不同的命名空间。

以上便是本文的全部内容,关于 HDFS 的文件读写,容错等内容会在下一篇文章通过漫画的形式介绍。

参考文献

文 | Skye

(编辑:温州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!