天天看點

Hadoop 用FileStatus類來檢視HDFS中檔案或目錄的元資訊

 Hadoop中的FileStatus類可以用來檢視HDFS中檔案或者目錄的元資訊,任意的檔案或者目錄都可以拿到對應的FileStatus, 我們這裡簡單的示範下這個類的相關API:

  1. /*  
  2.  */ 
  3. package com.charles.hadoop.fs; 
  4. import java.net.URI; 
  5. import java.sql.Timestamp; 
  6. import org.apache.hadoop.conf.Configuration; 
  7. import org.apache.hadoop.fs.FileStatus; 
  8. import org.apache.hadoop.fs.FileSystem; 
  9. import org.apache.hadoop.fs.Path; 
  10. /** 
  11.  * 
  12.  * Description:這個類示範如何通過FileSystem的getFileStatus()方法來獲得FileStatus對象 
  13.  * 進而查詢檔案或者目錄的元資訊 
  14.  *  
  15.  * 我們這裡做2個實驗,依次是擷取HDFS中的某檔案的元資訊,擷取HDFS中某目錄的元資訊 
  16.  * 
  17.  * @author charles.wang 
  18.  * @created May 26, 2012 1:43:01 PM 
  19.  *  
  20.  */ 
  21. public class FileMetadataQuerier { 
  22.     /** 
  23.      * @param args 
  24.      */ 
  25.     public static void main(String[] args) throws Exception { 
  26.         // TODO Auto-generated method stub 
  27.         //讀取hadoop檔案系統的配置 
  28.         Configuration conf = new Configuration(); 
  29.         conf.set("hadoop.job.ugi", "hadoop-user,hadoop-user"); 
  30.         //實驗1:檢視HDFS中某檔案的元資訊 
  31.         System.out.println("實驗1:檢視HDFS中某檔案的元資訊"); 
  32.         String fileUri = args[0]; 
  33.         FileSystem fileFS = FileSystem.get(URI.create(fileUri) ,conf); 
  34.         FileStatus fileStatus = fileFS.getFileStatus(new Path(fileUri)); 
  35.         //擷取這個檔案的基本資訊       
  36.         if(fileStatus.isDir()==false){ 
  37.             System.out.println("這是個檔案"); 
  38.         } 
  39.         System.out.println("檔案路徑: "+fileStatus.getPath()); 
  40.         System.out.println("檔案長度: "+fileStatus.getLen()); 
  41.         System.out.println("檔案修改日期: "+new Timestamp (fileStatus.getModificationTime()).toString()); 
  42.         System.out.println("檔案上次通路日期: "+new Timestamp(fileStatus.getAccessTime()).toString()); 
  43.         System.out.println("檔案備份數: "+fileStatus.getReplication()); 
  44.         System.out.println("檔案的塊大小: "+fileStatus.getBlockSize()); 
  45.         System.out.println("檔案所有者:  "+fileStatus.getOwner()); 
  46.         System.out.println("檔案所在的分組: "+fileStatus.getGroup()); 
  47.         System.out.println("檔案的 權限: "+fileStatus.getPermission().toString()); 
  48.         System.out.println(); 
  49.         //實驗2:檢視HDFS中某檔案的元資訊 
  50.         System.out.println("實驗2:檢視HDFS中某目錄的元資訊"); 
  51.         String dirUri = args[1]; 
  52.         FileSystem dirFS = FileSystem.get(URI.create(dirUri) ,conf); 
  53.         FileStatus dirStatus = dirFS.getFileStatus(new Path(dirUri)); 
  54.         //擷取這個目錄的基本資訊       
  55.         if(dirStatus.isDir()==true){ 
  56.             System.out.println("這是個目錄"); 
  57.         } 
  58.         System.out.println("目錄路徑: "+dirStatus.getPath()); 
  59.         System.out.println("目錄長度: "+dirStatus.getLen()); 
  60.         System.out.println("目錄修改日期: "+new Timestamp (dirStatus.getModificationTime()).toString()); 
  61.         System.out.println("目錄上次通路日期: "+new Timestamp(dirStatus.getAccessTime()).toString()); 
  62.         System.out.println("目錄備份數: "+dirStatus.getReplication()); 
  63.         System.out.println("目錄的塊大小: "+dirStatus.getBlockSize()); 
  64.         System.out.println("目錄所有者:  "+dirStatus.getOwner()); 
  65.         System.out.println("目錄所在的分組: "+dirStatus.getGroup()); 
  66.         System.out.println("目錄的 權限: "+dirStatus.getPermission().toString()); 
  67.         System.out.println("這個目錄下包含以下檔案或目錄:"); 
  68.         for(FileStatus fs : dirFS.listStatus(new Path(dirUri))){ 
  69.             System.out.println(fs.getPath()); 
  70.         } 
  71.     } 

最終顯示結果為:

  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. 實驗2:檢視HDFS中某目錄的元資訊 
  13. 這是個目錄 
  14. 目錄路徑: hdfs://192.168.129.35:9000/user/hadoop-user 
  15. 目錄長度: 0 
  16. 目錄修改日期: 2012-05-26 13:34:10.743 
  17. 目錄上次通路日期: 1970-01-01 08:00:00.0 
  18. 目錄備份數: 0 
  19. 目錄的塊大小: 0 
  20. 目錄所有者:  hadoop-user 
  21. 目錄所在的分組: supergroup 
  22. 目錄的 權限: rwxr-xr-x 
  23. 這個目錄下包含以下檔案或目錄: 
  24. hdfs://192.168.129.35:9000/user/hadoop-user/copyMe.txt 
  25. hdfs://192.168.129.35:9000/user/hadoop-user/input 
  26. hdfs://192.168.129.35:9000/user/hadoop-user/output 
  27. hdfs://192.168.129.35:9000/user/hadoop-user/textfile.txt 

對于檔案,其檔案長度,備份數,修改日期,權限資訊符合真實情況:

Hadoop 用FileStatus類來檢視HDFS中檔案或目錄的元資訊

而blocksize,因為我們說了HDFS中預設是64MB = 67108864 Byte

Hadoop 用FileStatus類來檢視HDFS中檔案或目錄的元資訊

 對于目錄,長度,備份數,塊大小都沒有語義,是以這裡都為0.

繼續閱讀