块池如何在HDFS联合中起作用

时间:2013-01-22 14:01:52

标签: hadoop hdfs

所以我正在阅读Hadoop:The Definitive Guide。这个page中的一句话让我感到困惑。所以我创建了一个描绘每个句子的图像。

HDFS Federation

句子说,

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

我很困惑!

3 个答案:

答案 0 :(得分:1)

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

我认为值得看另一种表现形式:

federation

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

我从中读到的原因背后的原因是,这允许命名空间为新块生成块ID,而无需与其他命名空间协调。 namenode的失败不会阻止datanode在集群中提供其他名称节点。

答案 1 :(得分:1)

为了更清晰 - 如果上图中的NameNode NN-n出现故障,Pool-n也将无法使用。因此,在恢复Namenone NN-n之前,将无法访问Pool-n中维护的datanode块。或者以其他方式发生

答案 2 :(得分:0)

我发现这有用,它来自书籍hadoop-operations:
乍一看,似乎联邦与简单的多重联合不同 谨慎的集群,保存客户端插件以将它们视为单个逻辑命名空间。 然而,主要区别因素之一是联合中的每个数据节点 cluster存储每个namenode的块。当每个namenode格式化时,它会生成 块池,其中存储与该名称节点相关联的块数据。每个datanode, 反过来,存储多个块池的数据,并与每个名称节点进行通信。 当namenode从datanode接收到心跳时,它会获知总数 其他块池消耗的datanode上的空间,以及非HDFS数据。该 让所有数据节点参与所有块池而不是简单的理由 具有谨慎集群的是,这实现了更好的数据节点容量的总利用率。 相反,如果我们要为大量使用的话完全拥有一组单独的数据节点 namenode A,namenode B的datanodes在namenode A时未被充分利用 datanodes努力跟上负荷。