设为首页 收藏本站
查看: 1291|回复: 0

[经验分享] Hadoop 用FileStatus类来查看HDFS中文件或目录的元信息

[复制链接]

尚未签到

发表于 2018-11-1 08:05:43 | 显示全部楼层 |阅读模式
  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[0];
  •         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[1];
  •         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
  

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

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

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




运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-629136-1-1.html 上篇帖子: Hadoop 利用FileSystem API 执行hadoop文件读写操作 下篇帖子: Hadoop 压缩文件方式比较
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表