Hadoop中的FileStatus類能夠用來查看HDFS中文件或者目錄的元信息,任意的文件或者目錄均可以拿到對應的FileStatus, 咱們這裏簡單的演示下這個類的相關API:java
- /*
- */
- 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());
- }
- }
- }
最終顯示結果爲:sql
- 實驗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
對於文件,其文件長度,備份數,修改日期,權限信息符合真實狀況:apache
而blocksize,由於咱們說了HDFS中默認是64MB = 67108864 Byteide
對於目錄,長度,備份數,塊大小都沒有語義,因此這裏都爲0.oop
而目錄下包含其餘信息,包括其下的文件和子目錄都是符合真實狀況的:spa