Hadoop 用FileStatus類來查看HDFS中文件或目錄的元信息

 Hadoop中的FileStatus類能夠用來查看HDFS中文件或者目錄的元信息,任意的文件或者目錄均可以拿到對應的FileStatus, 咱們這裏簡單的演示下這個類的相關API:java

  
  
           
  
  
  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.  

最終顯示結果爲:sql

  
  
           
  
  
  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 

 

對於文件,其文件長度,備份數,修改日期,權限信息符合真實狀況:apache

而blocksize,由於咱們說了HDFS中默認是64MB = 67108864 Byteide

 

 對於目錄,長度,備份數,塊大小都沒有語義,因此這裏都爲0.oop

而目錄下包含其餘信息,包括其下的文件和子目錄都是符合真實狀況的:spa

相關文章
相關標籤/搜索