hadoop - HDFS - block 大小相关

标签 hadoop mapreduce hdfs

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

  1. 第二个 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/

相关文章:

hadoop - Spark 查询有问题,因为处理阻塞在一个阶段并一直阻塞直到磁盘变满

hadoop - Pig/MapReduce工作分析概念需要了解

hadoop - 压缩文件 'hadoop hdfs -get'

java - 使用 java 将 hdfs 文件复制到另一个 hdfs 位置

hadoop -libjars 和 ClassNotFoundException

hadoop - 在任何时间范围内进行统计的唯一身份访问者都算在内吗?

scala - Spark 上下文抛出 'error: identifier expected but ' [' found.'

java - NodeWritable java.lang.NoClassDefFoundError Hadoop耶拿

hadoop - 如何更新任务跟踪器以确保我的映射器仍然运行良好而不是产生超时?

hadoop - Lucene在Hadoop文件系统(HDFS)上建立索引