根据hdfs指南,对于较小的文件大小,hadoop没有为通过数据节点存储文件数据分配完整的块。我正在使用filestatus使用javaapi来连接以获取与文件路径相关联的元数据信息。下面提到的是代码。
...
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
1条答案
按热度按时间nwsw7zdq1#
与我们经常使用的非分布式文件系统(hdfs、ext3、fat32等)相比,hadoop中的块大小具有非常不同的含义。您不应该像在其他文件系统中那样担心浪费空间和块大小。
hdfs中的块大小仅表示:1)在存储文件时,hdfs会将文件分块存储在不同的机器上,以便在多台机器上均匀地分布数据
2) 读取时,每个块将运行一个Map器任务,在处理大型文件时允许并行化
顺便说一句,您可以查询每个文件的块大小的原因是,您还可以设置每个文件的块大小,这与常用的文件系统相比也有很大的不同。