我只有10 MB大小的文件。我认为在HDFS中,第一个文件消耗10 MB,其余54 MB可以释放到可用空间。 我的问题是 -
答案 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。