HDFS的fsimages是hdfs准实时状态镜像文件,里面包含hdfs文件大小等元数据信息,直接拉取该文件分析,比通过hdfs命令或者接口拉取分析hive表文件大小等信息消耗的资源要小很多。
下面是通过java客户端的DFSAdmin拉取HDFS的fsimages文件代码。
public File fetchImage(File dir) throws IOException {
new DFSAdmin(conf).fetchImage(new String[]{"-fetchImage", dir.getAbsolutePath()}, 1);
Collection<File> files = FileUtils.listFiles(dir, null, false);
Preconditions.checkState(!files.isEmpty(), "fsimage dir is empty");
return files.stream().findFirst().get();
}