根据HDFS指南,对于较小的文件大小,hadoop未分配用于在数据节点上存储文件数据的完整块。我正在使用FileStatus使用java api连接来获取与文件路径关联的元数据信息。下面提到的是代码。
...
FileSystem fs = FileSystem.get(URI.create("hdfs://10.0.7.111:8020/"), conf);
iterator = fs.listFiles(new Path("/"), true);
while(iterator.hasNext()){
LocatedFileStatus status = iterator.next();
Path path = status.getPath();
System.out.println(path);
FileStatus status1 = FileSystem.get(URI.create(path.toString()), conf).getFileStatus(path);
System.out.println(status1.isDirectory());
System.out.println(status1.isFile());
System.out.println("Length " + status1.getLen());
System.out.println(status1.getReplication());
System.out.println("Block Size" + status1.getBlockSize());
}
...
我希望块大小与文件大小相同,但显示128 MB。下面提到的是输出。我的理解不正确吗?提前感谢。
File : hdfs://10.0.7.111:8020/t1/test1.txt
...
Length : 53
...
Block Size : 134217728
答案 0 :(得分:0)
与我们经常使用的非分布式文件系统(HDFS,EXT3,FAT32等)相比,Hadoop中的块大小与您可能习惯的大小截然不同。您不应该像在其他文件系统中那样担心浪费的空间和块大小。
HDFS中的块大小仅表示: 1)存储文件时,HDFS会将文件分块并存储在不同的机器上,以便在多台机器上均匀分配数据
2)当读取一个mapper任务时,每个块将运行一个任务,允许在处理大文件时进行并行处理
顺便说一句。你可以查询每个文件的块大小的原因是你也可以为每个文件设置它,与常用的文件系统相比,这也是非常不同的。