【问题标题】:HDFS - Block Size RelatedHDFS - 块大小相关
【发布时间】:2015-11-04 04:35:33
【问题描述】:

我只有 10 MB 大小的文件。我认为在 HDFS 中,第一个文件消耗 10 MB,其余 54 MB 被释放到可用空间中。 我的问题是——

  1. 第二个 10 MB 文件(或下一个 10 MB 文件序列)会继续添加到此文件中,直到变为 64 MB? 例如- 如果我们总共消耗 2 个 64 MB 的块和 20 MB 的第 3 个块,那么输入拆分将提供 3 个输出 2 64MB 和 1 20MB?是真的吗?

【问题讨论】:

    标签: hadoop mapreduce hdfs


    【解决方案1】:

    参考 Hadoop - The Definitive Guide

    HDFS 存储小文件效率低,因为每个文件都存储在一个块中,并且块元数据由名称节点保存在内存中。因此,大量的小文件会占用 namenode 上的大量内存。 (但是请注意,小文件占用的磁盘空间不会超过存储文件原始内容所需的空间。例如,以 128 MB 块大小存储的 1 MB 文件使用 1 MB 的磁盘空间,而不是 128 MB。)

    所以你说得对,“HDFS 第一个文件消耗 10 MB,其余 54 MB 被释放到可用空间。”

    但是,HDFS 块不是物理存储分配单元,而是逻辑存储分配单元。所以它不会一直添加到这个块,直到它变成 64 MB 或块大小。(作为释放的磁盘空间已添加到可用存储空间)

    映射器的数量取决于 inputsplit 的数量,并且 Job Client 会根据运行作业时指定的位于 HDFS 上的输入路径中的数据计算输入拆分。因此根据您的示例,它将创建 3 个输入分割,2 64MB 和 1 20MB(假设默认 HDFS 块大小)。

    【讨论】:

      【解决方案2】:

      块大小(64MB 或 128MB)指的是文件分割大小的最大值。即使您的文件大小小于 64 也意味着它将被视为块/拆分。

      考虑块大小为 64MB,那么如果假设你要保存 10MB 的文件意味着它只需要 10MB,那就是你的文件的块/拆分。 如果假设您要保存 70MB 文件,则意味着您的文件将在存储中将其拆分为 64MB 和 6MB 块/拆分。没有什么像块应该有 64MB 或 128MB。

      【讨论】:

        猜你喜欢
        • 2016-11-30
        • 1970-01-01
        • 2014-11-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-12-26
        • 2015-07-03
        相关资源
        最近更新 更多