上帝大脸 发表于 2018-11-1 08:05:43

Hadoop 用FileStatus类来查看HDFS中文件或目录的元信息

  Hadoop中的FileStatus类可以用来查看HDFS中文件或者目录的元信息,任意的文件或者目录都可以拿到对应的FileStatus, 我们这里简单的演示下这个类的相关API:
  


[*]/*
[*] */
[*]package com.charles.hadoop.fs;
[*]
[*]import java.net.URI;
[*]import java.sql.Timestamp;
[*]
[*]import org.apache.hadoop.conf.Configuration;
[*]import org.apache.hadoop.fs.FileStatus;
[*]import org.apache.hadoop.fs.FileSystem;
[*]import org.apache.hadoop.fs.Path;
[*]
[*]/**
[*] *
[*] * Description:这个类演示如何通过FileSystem的getFileStatus()方法来获得FileStatus对象
[*] * 进而查询文件或者目录的元信息
[*] *
[*] * 我们这里做2个实验,依次是获取HDFS中的某文件的元信息,获取HDFS中某目录的元信息
[*] *
[*] * @author charles.wang
[*] * @created May 26, 2012 1:43:01 PM
[*] *
[*] */
[*]public class FileMetadataQuerier {
[*]
[*]    /**
[*]   * @param args
[*]   */
[*]    public static void main(String[] args) throws Exception {
[*]      // TODO Auto-generated method stub
[*]
[*]
[*]
[*]      //读取hadoop文件系统的配置
[*]      Configuration conf = new Configuration();
[*]      conf.set("hadoop.job.ugi", "hadoop-user,hadoop-user");
[*]
[*]      //实验1:查看HDFS中某文件的元信息
[*]      System.out.println("实验1:查看HDFS中某文件的元信息");
[*]      String fileUri = args;
[*]      FileSystem fileFS = FileSystem.get(URI.create(fileUri) ,conf);
[*]      FileStatus fileStatus = fileFS.getFileStatus(new Path(fileUri));
[*]      //获取这个文件的基本信息
[*]      if(fileStatus.isDir()==false){
[*]            System.out.println("这是个文件");
[*]      }
[*]      System.out.println("文件路径: "+fileStatus.getPath());
[*]      System.out.println("文件长度: "+fileStatus.getLen());
[*]      System.out.println("文件修改日期: "+new Timestamp (fileStatus.getModificationTime()).toString());
[*]      System.out.println("文件上次访问日期: "+new Timestamp(fileStatus.getAccessTime()).toString());
[*]      System.out.println("文件备份数: "+fileStatus.getReplication());
[*]      System.out.println("文件的块大小: "+fileStatus.getBlockSize());
[*]      System.out.println("文件所有者:"+fileStatus.getOwner());
[*]      System.out.println("文件所在的分组: "+fileStatus.getGroup());
[*]      System.out.println("文件的 权限: "+fileStatus.getPermission().toString());
[*]      System.out.println();
[*]
[*]      //实验2:查看HDFS中某文件的元信息
[*]      System.out.println("实验2:查看HDFS中某目录的元信息");
[*]      String dirUri = args;
[*]      FileSystem dirFS = FileSystem.get(URI.create(dirUri) ,conf);
[*]      FileStatus dirStatus = dirFS.getFileStatus(new Path(dirUri));
[*]      //获取这个目录的基本信息
[*]      if(dirStatus.isDir()==true){
[*]            System.out.println("这是个目录");
[*]      }
[*]      System.out.println("目录路径: "+dirStatus.getPath());
[*]      System.out.println("目录长度: "+dirStatus.getLen());
[*]      System.out.println("目录修改日期: "+new Timestamp (dirStatus.getModificationTime()).toString());
[*]      System.out.println("目录上次访问日期: "+new Timestamp(dirStatus.getAccessTime()).toString());
[*]      System.out.println("目录备份数: "+dirStatus.getReplication());
[*]      System.out.println("目录的块大小: "+dirStatus.getBlockSize());
[*]      System.out.println("目录所有者:"+dirStatus.getOwner());
[*]      System.out.println("目录所在的分组: "+dirStatus.getGroup());
[*]      System.out.println("目录的 权限: "+dirStatus.getPermission().toString());
[*]      System.out.println("这个目录下包含以下文件或目录:");
[*]      for(FileStatus fs : dirFS.listStatus(new Path(dirUri))){
[*]            System.out.println(fs.getPath());
[*]      }
[*]
[*]
[*]    }
[*]
[*]}
  

  最终显示结果为:
  


[*]实验1:查看HDFS中某文件的元信息
[*]这是个文件
[*]文件路径: hdfs://192.168.129.35:9000/user/hadoop-user/textfile.txt
[*]文件长度: 93
[*]文件修改日期: 2012-05-26 12:49:04.285
[*]文件上次访问日期: 2012-05-26 12:49:04.285
[*]文件备份数: 1
[*]文件的块大小: 67108864
[*]文件所有者:hadoop-user
[*]文件所在的分组: supergroup
[*]文件的 权限: rw-r--r--
[*]
[*]实验2:查看HDFS中某目录的元信息
[*]这是个目录
[*]目录路径: hdfs://192.168.129.35:9000/user/hadoop-user
[*]目录长度: 0
[*]目录修改日期: 2012-05-26 13:34:10.743
[*]目录上次访问日期: 1970-01-01 08:00:00.0
[*]目录备份数: 0
[*]目录的块大小: 0
[*]目录所有者:hadoop-user
[*]目录所在的分组: supergroup
[*]目录的 权限: rwxr-xr-x
[*]这个目录下包含以下文件或目录:
[*]hdfs://192.168.129.35:9000/user/hadoop-user/copyMe.txt
[*]hdfs://192.168.129.35:9000/user/hadoop-user/input
[*]hdfs://192.168.129.35:9000/user/hadoop-user/output
[*]hdfs://192.168.129.35:9000/user/hadoop-user/textfile.txt
  

  对于文件,其文件长度,备份数,修改日期,权限信息符合真实情况:

  而blocksize,因为我们说了HDFS中默认是64MB = 67108864 Byte

  对于目录,长度,备份数,块大小都没有语义,所以这里都为0.
  而目录下包含其他信息,包括其下的文件和子目录都是符合真实情况的:



页: [1]
查看完整版本: Hadoop 用FileStatus类来查看HDFS中文件或目录的元信息