我只有10MB大小的文件,我认为在hdfs中,第一个文件消耗10MB,剩下的54MB被释放到可用空间。我的问题是-第二个10 mb的文件(或下一个10 mb的文件序列)会一直添加到这个文件中,直到变成64 mb?例如,如果我们总共消耗2个块,每个块64 mb,第3个块20 mb,那么输入拆分将得到3个输出2 64mb和1 20mb?是真的吗?
0aydgbwb1#
参考hadoop-权威指南:hdfs存储小文件效率低下,因为每个文件都存储在一个块中,而块元数据由namenode保存在内存中。因此,大量的小文件会占用namenode上的大量内存(但是,请注意,小文件占用的磁盘空间不会超过存储文件原始内容所需的磁盘空间。例如,块大小为128 mb的1 mb文件使用1 mb磁盘空间,而不是128 mb。)所以你说得对,“hdfs第一个文件消耗10MB,剩下的54MB被释放到可用空间的ad中。”但是,hdfs块不是物理存储分配单元,而是逻辑存储分配单元。因此,它不会一直添加到此块,直到它变为64 mb或块大小(因为释放的磁盘空间被添加到可用存储中)Map器的数量取决于inputsplits的数量,作业客户端在运行作业时对指定的hdfs上的输入路径中的数据计算输入拆分。因此,根据您的示例,它将创建3个InputSplit,2 64mb和1 20mb(假设默认的hdfs块大小)。
ugmeyewa2#
块大小(64mb或128mb),表示文件拆分大小的最大值。即使文件大小小于64,也意味着它将被视为块/分割。假设块大小为64mb,那么如果您要保存10mb的文件意味着只需要10mb,这就是文件的块/溢出。如果假设您要保存70mb文件,则意味着您的文件将在存储中拆分为64mb和6mb块/拆分。没有什么比块应该有64mb或128mb更好的了。
2条答案
按热度按时间0aydgbwb1#
参考hadoop-权威指南:
hdfs存储小文件效率低下,因为每个文件都存储在一个块中,而块元数据由namenode保存在内存中。因此,大量的小文件会占用namenode上的大量内存(但是,请注意,小文件占用的磁盘空间不会超过存储文件原始内容所需的磁盘空间。例如,块大小为128 mb的1 mb文件使用1 mb磁盘空间,而不是128 mb。)
所以你说得对,“hdfs第一个文件消耗10MB,剩下的54MB被释放到可用空间的ad中。”
但是,hdfs块不是物理存储分配单元,而是逻辑存储分配单元。因此,它不会一直添加到此块,直到它变为64 mb或块大小(因为释放的磁盘空间被添加到可用存储中)
Map器的数量取决于inputsplits的数量,作业客户端在运行作业时对指定的hdfs上的输入路径中的数据计算输入拆分。因此,根据您的示例,它将创建3个InputSplit,2 64mb和1 20mb(假设默认的hdfs块大小)。
ugmeyewa2#
块大小(64mb或128mb),表示文件拆分大小的最大值。即使文件大小小于64,也意味着它将被视为块/分割。
假设块大小为64mb,那么如果您要保存10mb的文件意味着只需要10mb,这就是文件的块/溢出。如果假设您要保存70mb文件,则意味着您的文件将在存储中拆分为64mb和6mb块/拆分。没有什么比块应该有64mb或128mb更好的了。