问题还原:
编写程序统计出 HDFS 文件系统中的平均数据块数(数据块总数/文件总数)
比如:一个文件有 5 个块,一个文件有 3 个块,那么平均数据块数为 4
如果还有一个文件,并且数据块就 1 个,那么整个 HDFS 的平均数据块数就是 3
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.BlockLocation;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.LocatedFileStatus;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.fs.RemoteIterator;
import org.junit.Test;
public class Question2 {
@Test
public void Test() throws Exception{
Configuration conf = new Configuration();
conf.set("fs.defaultFS", "hdfs://hadoop01:9000");
System.setProperty("HADOOP_USER_NAME", "hadoop");
FileSystem fs = FileSystem.get(conf);
Path path = new Path("/");
//获取指定目录下的所有文件
RemoteIterator<LocatedFileStatus> listFiles = fs.listFiles(path, false);
//目标路径下的文件计数器
int fileNum = 0;
//目标路径下block块的个数
int blockNum = 0;
while (listFiles.hasNext()) {
fileNum++;
LocatedFileStatus next = listFiles.next();
//获取每个文件的block块
BlockLocation[] blockLocations = next.getBlockLocations();
blockNum += blockLocations.length;
}
//计算平均值
float avgBlockNum = blockNum * 1F / fileNum;
System.out.println(avgBlockNum);
}
}