HDFS - 块大小相关

时间:2015-11-04 04:35:34

标签: hadoop mapreduce hdfs

我只有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?这是真的吗?

2 个答案:

答案 0 :(得分:1)

参考 Hadoop - 权威指南

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

所以你是对的," HDFS第一个文件消耗10 MB,其余54 MB被释放到可用空间。"

但是,HDFS块不是物理存储分配单元,而是逻辑存储分配单元。因此,它不会继续添加到此块,直到它变为64 MB或块大小。(作为释放的磁盘空间被添加到可用存储空间中)

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

答案 1 :(得分:0)

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

将块大小视为64MB,如果假设您要保存10MB文件意味着它只需要10MB,那就是文件的阻塞/溢出。 如果假设您要保存70MB文件意味着您的文件将其拆分为64MB和6MB块/分区存储。没有什么像块应该有64MB或128MB。