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

简介:

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


  
  
  1. /*  
  2.  */ 
  3. package com.charles.hadoop.fs; 
  4.  
  5. import java.net.URI; 
  6. import java.sql.Timestamp; 
  7.  
  8. import org.apache.hadoop.conf.Configuration; 
  9. import org.apache.hadoop.fs.FileStatus; 
  10. import org.apache.hadoop.fs.FileSystem; 
  11. import org.apache.hadoop.fs.Path; 
  12.  
  13. /** 
  14.  * 
  15.  * Description:这个类演示如何通过FileSystem的getFileStatus()方法来获得FileStatus对象 
  16.  * 进而查询文件或者目录的元信息 
  17.  *  
  18.  * 我们这里做2个实验,依次是获取HDFS中的某文件的元信息,获取HDFS中某目录的元信息 
  19.  * 
  20.  * @author charles.wang 
  21.  * @created May 26, 2012 1:43:01 PM 
  22.  *  
  23.  */ 
  24. public class FileMetadataQuerier { 
  25.  
  26.     /** 
  27.      * @param args 
  28.      */ 
  29.     public static void main(String[] args) throws Exception { 
  30.         // TODO Auto-generated method stub 
  31.          
  32.          
  33.          
  34.         //读取hadoop文件系统的配置 
  35.         Configuration conf = new Configuration(); 
  36.         conf.set("hadoop.job.ugi""hadoop-user,hadoop-user"); 
  37.          
  38.         //实验1:查看HDFS中某文件的元信息 
  39.         System.out.println("实验1:查看HDFS中某文件的元信息"); 
  40.         String fileUri = args[0]; 
  41.         FileSystem fileFS = FileSystem.get(URI.create(fileUri) ,conf); 
  42.         FileStatus fileStatus = fileFS.getFileStatus(new Path(fileUri)); 
  43.         //获取这个文件的基本信息       
  44.         if(fileStatus.isDir()==false){ 
  45.             System.out.println("这是个文件"); 
  46.         } 
  47.         System.out.println("文件路径: "+fileStatus.getPath()); 
  48.         System.out.println("文件长度: "+fileStatus.getLen()); 
  49.         System.out.println("文件修改日期: "+new Timestamp (fileStatus.getModificationTime()).toString()); 
  50.         System.out.println("文件上次访问日期: "+new Timestamp(fileStatus.getAccessTime()).toString()); 
  51.         System.out.println("文件备份数: "+fileStatus.getReplication()); 
  52.         System.out.println("文件的块大小: "+fileStatus.getBlockSize()); 
  53.         System.out.println("文件所有者:  "+fileStatus.getOwner()); 
  54.         System.out.println("文件所在的分组: "+fileStatus.getGroup()); 
  55.         System.out.println("文件的 权限: "+fileStatus.getPermission().toString()); 
  56.         System.out.println(); 
  57.          
  58.         //实验2:查看HDFS中某文件的元信息 
  59.         System.out.println("实验2:查看HDFS中某目录的元信息"); 
  60.         String dirUri = args[1]; 
  61.         FileSystem dirFS = FileSystem.get(URI.create(dirUri) ,conf); 
  62.         FileStatus dirStatus = dirFS.getFileStatus(new Path(dirUri)); 
  63.         //获取这个目录的基本信息       
  64.         if(dirStatus.isDir()==true){ 
  65.             System.out.println("这是个目录"); 
  66.         } 
  67.         System.out.println("目录路径: "+dirStatus.getPath()); 
  68.         System.out.println("目录长度: "+dirStatus.getLen()); 
  69.         System.out.println("目录修改日期: "+new Timestamp (dirStatus.getModificationTime()).toString()); 
  70.         System.out.println("目录上次访问日期: "+new Timestamp(dirStatus.getAccessTime()).toString()); 
  71.         System.out.println("目录备份数: "+dirStatus.getReplication()); 
  72.         System.out.println("目录的块大小: "+dirStatus.getBlockSize()); 
  73.         System.out.println("目录所有者:  "+dirStatus.getOwner()); 
  74.         System.out.println("目录所在的分组: "+dirStatus.getGroup()); 
  75.         System.out.println("目录的 权限: "+dirStatus.getPermission().toString()); 
  76.         System.out.println("这个目录下包含以下文件或目录:"); 
  77.         for(FileStatus fs : dirFS.listStatus(new Path(dirUri))){ 
  78.             System.out.println(fs.getPath()); 
  79.         } 
  80.          
  81.          
  82.     } 
  83.  

最终显示结果为:


  
  
  1. 实验1:查看HDFS中某文件的元信息 
  2. 这是个文件 
  3. 文件路径: hdfs://192.168.129.35:9000/user/hadoop-user/textfile.txt 
  4. 文件长度: 93 
  5. 文件修改日期: 2012-05-26 12:49:04.285 
  6. 文件上次访问日期: 2012-05-26 12:49:04.285 
  7. 文件备份数: 1 
  8. 文件的块大小: 67108864 
  9. 文件所有者:  hadoop-user 
  10. 文件所在的分组: supergroup 
  11. 文件的 权限: rw-r--r-- 
  12.  
  13. 实验2:查看HDFS中某目录的元信息 
  14. 这是个目录 
  15. 目录路径: hdfs://192.168.129.35:9000/user/hadoop-user 
  16. 目录长度: 0 
  17. 目录修改日期: 2012-05-26 13:34:10.743 
  18. 目录上次访问日期: 1970-01-01 08:00:00.0 
  19. 目录备份数: 0 
  20. 目录的块大小: 0 
  21. 目录所有者:  hadoop-user 
  22. 目录所在的分组: supergroup 
  23. 目录的 权限: rwxr-xr-x 
  24. 这个目录下包含以下文件或目录: 
  25. hdfs://192.168.129.35:9000/user/hadoop-user/copyMe.txt 
  26. hdfs://192.168.129.35:9000/user/hadoop-user/input 
  27. hdfs://192.168.129.35:9000/user/hadoop-user/output 
  28. hdfs://192.168.129.35:9000/user/hadoop-user/textfile.txt 

 

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

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

 

 对于目录,长度,备份数,块大小都没有语义,所以这里都为0.

而目录下包含其他信息,包括其下的文件和子目录都是符合真实情况的:





本文转自 charles_wang888 51CTO博客,原文链接:http://blog.51cto.com/supercharles888/879011,如需转载请自行联系原作者

目录
相关文章
|
20天前
|
XML 存储 分布式计算
【赵渝强老师】史上最详细:Hadoop HDFS的体系架构
HDFS(Hadoop分布式文件系统)由三个核心组件构成:NameNode、DataNode和SecondaryNameNode。NameNode负责管理文件系统的命名空间和客户端请求,维护元数据文件fsimage和edits;DataNode存储实际的数据块,默认大小为128MB;SecondaryNameNode定期合并edits日志到fsimage中,但不作为NameNode的热备份。通过这些组件的协同工作,HDFS实现了高效、可靠的大规模数据存储与管理。
105 14
|
5月前
|
分布式计算 Kubernetes Hadoop
大数据-82 Spark 集群模式启动、集群架构、集群管理器 Spark的HelloWorld + Hadoop + HDFS
大数据-82 Spark 集群模式启动、集群架构、集群管理器 Spark的HelloWorld + Hadoop + HDFS
288 6
|
3月前
|
Java
java实现从HDFS上下载文件及文件夹的功能,以流形式输出,便于用户自定义保存任何路径下
java实现从HDFS上下载文件及文件夹的功能,以流形式输出,便于用户自定义保存任何路径下
131 34
|
5月前
|
SQL 分布式计算 关系型数据库
Hadoop-24 Sqoop迁移 MySQL到Hive 与 Hive到MySQL SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
Hadoop-24 Sqoop迁移 MySQL到Hive 与 Hive到MySQL SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
186 0
|
5月前
|
SQL 分布式计算 关系型数据库
Hadoop-23 Sqoop 数据MySQL到HDFS(部分) SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
Hadoop-23 Sqoop 数据MySQL到HDFS(部分) SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
77 0
|
5月前
|
SQL 分布式计算 关系型数据库
Hadoop-22 Sqoop 数据MySQL到HDFS(全量) SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
Hadoop-22 Sqoop 数据MySQL到HDFS(全量) SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
115 0
|
5天前
|
存储 分布式计算 Hadoop
从“笨重大象”到“敏捷火花”:Hadoop与Spark的大数据技术进化之路
从“笨重大象”到“敏捷火花”:Hadoop与Spark的大数据技术进化之路
116 79
|
5月前
|
分布式计算 资源调度 Hadoop
大数据-80 Spark 简要概述 系统架构 部署模式 与Hadoop MapReduce对比
大数据-80 Spark 简要概述 系统架构 部署模式 与Hadoop MapReduce对比
131 2
|
3月前
|
存储 分布式计算 大数据
Flume+Hadoop:打造你的大数据处理流水线
本文介绍了如何使用Apache Flume采集日志数据并上传至Hadoop分布式文件系统(HDFS)。Flume是一个高可用、可靠的分布式系统,适用于大规模日志数据的采集和传输。文章详细描述了Flume的安装、配置及启动过程,并通过具体示例展示了如何将本地日志数据实时传输到HDFS中。同时,还提供了验证步骤,确保数据成功上传。最后,补充说明了使用文件模式作为channel以避免数据丢失的方法。
126 4
|
4月前
|
存储 分布式计算 Hadoop
数据湖技术:Hadoop与Spark在大数据处理中的协同作用
【10月更文挑战第27天】在大数据时代,数据湖技术凭借其灵活性和成本效益成为企业存储和分析大规模异构数据的首选。Hadoop和Spark作为数据湖技术的核心组件,通过HDFS存储数据和Spark进行高效计算,实现了数据处理的优化。本文探讨了Hadoop与Spark的最佳实践,包括数据存储、处理、安全和可视化等方面,展示了它们在实际应用中的协同效应。
263 2

热门文章

最新文章

相关实验场景

更多