4

所以我在阅读 Hadoop:权威指南。这一页中的一句话让我感到困惑。所以我创建了一个描述每个句子的图像。

HDFS 联盟

句子说,

在联合下,每个名称节点管理一个命名空间卷(黑色方块表示命名空间卷),它由命名空间的元数据和一个包含所有文件块的块池(由深灰色矩形表示)组成。命名空间。命名空间卷是相互独立的(在映像中,它们对每个命名节点都是独立的,与无共享),这意味着命名节点不会相互通信,而且一个命名节点的故障不会影响管理的命名空间的可用性由其他名称节点。但是,块池存储没有分区(因此在映像中的所有人之间共享),因此数据节点向集群中的每个名称节点注册(再次与所有名称节点共享)并存储来自多个块池的块(我的问题是我们如何拥有多个块池?整段不是总结了所有名称节点都有指向每个块的元数据,因此共享块池?)。

我他妈糊涂了!

4

3 回答 3

1

您对“块池”矩形的表示不准确,它应为“块池”。

我认为值得看看另一种表示:

联邦

所以基本上每个块池都是相互独立管理的,每个块都是属于单个命名空间的一组块。Namenodes 不相互交谈,这是有道理的。

从我读过的内容来看,这背后的原因是,这允许命名空间为新块生成块 ID,而无需与其他命名空间协调。名称节点的故障不会阻止数据节点为集群中的其他名称节点提供服务。

于 2013-01-22T16:21:25.300 回答
1

只是为了更清楚 - 如果上图中的 NameNode NN-n 出现故障,Pool-n 也将不可用。因此,在恢复 Namenone NN-n 之前,Pool-n 中维护的数据节点块将无法访问。或者它会以其他方式发生

于 2013-11-17T01:47:11.957 回答
0

我发现这很有帮助,它来自书籍 hadoop-operations:
乍一看,联邦似乎与简单地拥有多个离散集群没有什么不同,除了客户端插件将它们视为单个逻辑命名空间。 然而,主要的区别因素之一是联邦集群中的每个数据节点都为每个名称节点存储块。当每个名称节点被格式化时,它会生成一个块池,其中存储与该名称节点关联的块数据。每个数据节点依次为多个块池存储数据,并与每个名称节点通信。 当namenode从datanode接收到心跳时,它会了解datanode上其他块池消耗的总空间,以及非HDFS数据。让所有数据节点参与所有块池而不是简单地拥有离散集群的基本原理是,这样可以更好地利用数据节点容量。相反,如果我们要为频繁使用的名称节点 A 单独设置一组数据节点,则名称节点 B 的数据节点将未得到充分利用,而名称节点 A 的数据节点则难以跟上负载。

于 2017-10-21T06:37:54.217 回答