代码之家  ›  专栏  ›  技术社区  ›  Enrico Gallinucci

HDFS配置的容量高于磁盘容量

  •  3
  • Enrico Gallinucci  · 技术社区  · 6 年前

    我在Centos上使用Cloudera Express 5.11构建了一个11节点的集群。最初仅由7个节点组成;稍后又添加了4个节点。每个节点的磁盘容量都相同: 5.4 TB .

    我的问题是 hdfs dfsadmin -report 命令显示错误的磁盘使用率值,尤其是配置的容量。我的价值观是 6.34 TB 在前7个节点和 21.39 TB 在最后4个中。

    例如,在一个节点中,我有以下报告:

    Decommission Status : Normal
    Configured Capacity: 23515321991168 (21.39 TB)
    DFS Used: 4362808995840 (3.97 TB)
    Non DFS Used: 14117607018496 (12.84 TB)
    DFS Remaining: 3838187159552 (3.49 TB)
    DFS Used%: 18.55%
    DFS Remaining%: 16.32%
    Configured Cache Capacity: 2465202176 (2.30 GB)
    Cache Used: 0 (0 B)
    Cache Remaining: 2465202176 (2.30 GB)
    Cache Used%: 0.00%
    Cache Remaining%: 100.00%
    

    运行 df 上的命令 dfs.data.dir 文件夹向我显示 DFS Used 值(不是百分比)是正确的,但其他值相差很远。我已经读到,HDFS可能显示的值不是最新的,但我已经看到了几天相同的值,即使在重新启动所有服务和所有机器之后也是如此。

    最让我头疼的是:

    1. 配置的容量为 高得多 比实际容量大(我只有5 TB,怎么能推断出21 TB?)
    2. 对于这两组节点,我分别有两个不同的值

    这些价值观的原因是什么?有没有办法修复它们?

    PS:我问这个问题的原因是,如果值错误,HDFS会低估 DFS Used% 因此无法重新平衡节点中的文件。实际上,我为其发布值的节点具有:

    • 使用的DFS :~ 4 TB(正确)
    • DFS已使用% :~ 19%(错误)

    每个其他节点都有:

    • 使用的DFS :~2 TB(正确)
    • DFS已使用% :范围从11%到28%(错误)

    这使得 DFS已使用% 受牵连节点的平均值低于平均值,因此HDFS的平衡器推断不应重新平衡节点。

    PS2:我注意到的一件事是,第一组节点有Centos 6.9,而第二组节点有Centos 6.8。这会导致问题的出现吗?

    1 回复  |  直到 6 年前
        1
  •  2
  •   Enrico Gallinucci    5 年前

    使现代化

    一年半后,我找到了问题的真正根源。

    原因是我 多个目录 在中列出 dfs.datanode.data.dir HDFS的参数。显然,HDFS通过汇总每个目录的容量来估计配置的容量。问题是: 如果两个目录在同一个分区中,那么该分区的大小将被考虑两次 ! 奇怪的是,我在文档中没有发现任何提及这一点的内容。

    这给我带来了问题,因为在第一组机器中,有4个HDFS目录分配给3个分区,每个分区约1.8T(因此,其中只有一个被考虑了两次),而第二组有4个HDFS目录分配给1个分区约5.4TB(因此乘以4!)。

    最终,问题是机器的异构分区配置+HDF的一些低级细节没有正确记录的结果。

    我最终在Cloudera中创建了两组HDFS目录配置:一组用于第一组机器(有3个目录,每个分区一个),另一组用于第二组(唯一分区中有一个目录)。由于涉及数据重新平衡,请小心此操作。

    原始答案

    这些价值观的原因是什么?

    经过一些研究,这个问题似乎是在集群使用新资源(即新磁盘或新节点)更新时发生的,当HDFS使用所有相关数据节点的总容量更新相关数据节点的配置容量时(即,当我们升级前7个节点的磁盘时,每个节点的容量成为集群的总容量;当我们再添加4个节点时,每个新节点的容量成为新节点的总容量)。这可能是因为Cloudera经理吗?可能(这是我的猜测),但我没有证据。

    有没有办法修复它们?

    我阅读了Hadoop的Java代码,以了解节点配置容量的值是从何处获取的,它似乎来自Namenode的名称空间映像(这是一个二进制文件,而且,它是不可编辑的)。

    我最终做的是停用不平衡的节点(这触发了在其余节点上复制其块),删除此类节点上的HDFS数据,重新调试它并重新平衡数据。这不是我一直在寻找的解决方案,但至少它让我的数据得到了正确的重新平衡。