【问题标题】:How do block pools function in a HDFS Federation块池如何在 HDFS 联合中发挥作用
【发布时间】:2017-10-21 14:37:54
【问题描述】:

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

这句话说,

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

我真是一头雾水!

【问题讨论】:

    标签: hadoop hdfs


    【解决方案1】:

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

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

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

    从我读到的内容背后的原因是,这允许命名空间为新块生成块 ID,而无需与其他命名空间协调。一个namenode的故障不会阻止datanode为集群中的其他namenode提供服务。

    【讨论】:

    • 所以每个 Block pool 可能包含属于不同数据节点的数据。而且因为每个namenode都必须有权访问所有数据节点,所以所有数据节点都注册到所有存在的块池中?
    • @Expressions_Galore 你是对的,datanodes被所有namenodes用于块存储。
    • 联邦模型中的块识别方案是否与常规 HDFS 中的不同?如何确保区块池不产生冲突的区块 ID?
    • 块池是否存储与存储在数据节点上的文件相关的所有块的信息?
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2016-07-01
        • 1970-01-01
        • 2016-02-11
        • 1970-01-01
        • 2017-10-20
        • 2011-07-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多