gpt4 book ai didi

HDFS block 大小与实际文件大小

转载 作者:行者123 更新时间:2023-12-03 20:21:00 31 4
gpt4 key购买 nike

我知道 HDFS 使用数据节点中的常规 linux 文件系统存储数据。我的 HDFS 块大小是 128 MB .假设我有 10 GB我的 hadoop 集群中的磁盘空间,这意味着 HDFS 最初有 80 blocks作为可用存储。

如果我创建一个小文件,比如 12.8 MB , #available HDFS 块将变为 79。如果我创建另一个小文件 12.8 MB 会发生什么情况? #availbale 块会保持在 79 还是会下降到 78?在前一种情况下,HDFS 基本上会根据可用的可用磁盘空间在每次块分配后重新计算#available 块,因此,只有在消耗超过 128 MB 的磁盘空间后,#available 块才会变为 78。请说清楚。

最佳答案

最好的了解方法是尝试一下,看看下面的结果。

但在尝试之前,我的猜测是,即使你只能分配 80 在您的配置块中,您可以分配 80 多个非空文件。这是因为我认为每次分配非空文件时 HDFS 都不会使用完整块。换句话说,HDFS 块不是存储分配单元,而是复制单元。我认为 HDFS 的存储分配单位是底层文件系统的单位(如果您使用 ext4 的块大小为 4 KB,并且您在复制因子为 3 的集群中创建一个 1 KB 的文件,您将消耗 3 倍 4 KB = 12 KB 的硬盘空间)。

足够的猜测和思考,让我们尝试一下。我的实验室配置如下:

  • hadoop 版本 1.0.4
  • 4个数据节点,每个节点的可用空间略小于5.0G,ext4块大小为4K
  • 块大小为 64 MB,默认复制 1

  • 启动 HDFS 后,我有以下 NameNode 摘要:
  • 1 个文件和目录,0 个块 = 总共 1 个
  • 使用的 DFS:112 KB
  • 剩余 DFS:19.82 GB

  • 然后我执行以下命令:
  • hadoop fs -mkdir /test
  • for f in $(seq 1 10); do hadoop fs -copyFromLocal ./1K_file /test/$f; done

  • 有了这些结果:
  • 12 个文件和目录,10 个块 = 总共 22 个
  • 使用的 DFS:122.15 KB
  • 剩余 DFS:19.82 GB

  • 所以这 10 个文件没有消耗 10 倍 64 MB(没有修改“DFS Remaining”)。

    关于HDFS block 大小与实际文件大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15062457/

    31 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com