我只有 10 MB 大小的文件。我认为在 HDFS 中第一个文件消耗 10 MB,其余 54 MB 被释放到可用空间。 我的问题是 -
- 第二个 10 MB 的文件(或下一个 10 MB 的文件序列)会继续增加直到它变成 64 MB 吗? 例如- 如果我们总共消耗 2 个 64 MB 的 block 和 20 MB 的第 3 个 block ,那么输入拆分将给出 3 个输出 2 个 64MB 和 1 个 20MB?是真的吗?
最佳答案
引用 Hadoop - 权威指南:
HDFS 存储小文件效率低下,因为每个文件都存储在一个 block 中,并且 block 元数据由名称节点保存在内存中。因此,大量的小文件会占用名称节点上的大量内存。 (但是请注意,小文件占用的磁盘空间不会超过存储文件原始内容所需的空间。例如,一个 1 MB 的文件存储的 block 大小为 128 MB使用 1 MB 的磁盘空间,而不是 128 MB。)
所以您是对的,“HDFS 第一个文件占用 10 MB,其余 54 MB 被释放以添加到可用空间。”
但是,HDFS block 不是物理存储分配单元,而是逻辑存储分配单元。所以它不会一直添加到这个 block ,直到它变成64 MB或 block 大小。(作为释放的磁盘空间被添加到可用存储空间)
映射器的数量取决于输入拆分的数量,作业客户端根据运行作业时指定的位于 HDFS 上的输入路径 中的数据计算输入拆分。因此根据您的示例,它将创建 3 个输入拆分,2 个 64MB 和 1 个 20MB(假设默认 HDFS block 大小)。
关于hadoop - HDFS - block 大小相关,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33513782/