2012-07-09 121 views
4

我是一個有hadoop和東西的業餘愛好者。現在,我試圖訪問hadoop集羣(HDFS)並從客戶端eclipse中檢索文件列表。在hadoop java客戶端上設置所需的配置後,我可以執行以下操作。來自HDFS羣集的ListFiles

我可以執行copyFromLocalFilecopyToLocalFile操作從客戶端訪問HDFS。 這就是我所面臨的。當我給listFiles()方法,我得到

[email protected] 
[email protected] 

MainMethod

Properties props = new Properties(); 
props.setProperty("fs.defaultFS", "hdfs://<IPOFCLUSTER>:8020"); 
props.setProperty("mapreduce.jobtracker.address", "<IPOFCLUSTER>:8032"); 
props.setProperty("yarn.resourcemanager.address", "<IPOFCLUSTER>:8032"); 
props.setProperty("mapreduce.framework.name", "yarn"); 
FileSystem fs = FileSystem.get(toConfiguration(props)); // Setting up the required configurations 
Path p4 = new Path("/user/myusername/inputjson1/"); 
RemoteIterator<LocatedFileStatus> ritr = fs.listFiles(p4, true); 
while(ritr.hasNext()) 
     { 
      System.out.println(ritr.next().toString()); 
     } 

我也試過FileContext,最終只獲得了時間filestatus對象的字符串或東西。是否有可能在我迭代到遠程hdfs目錄時使用文件名,是否有一個名爲getPath()的方法,這是我們使用hadoop API檢索文件名的完整路徑的唯一方法,還是有其他方法以便我可以檢索指定目錄路徑中的文件的名稱,請幫助我完成此操作,謝謝。

回答

3

確實可以使用getPath()這會返回一個Path對象,它允許您查詢文件的名稱。

Path p = ritr.next().getPath(); 
// returns the filename or directory name if directory 
String name = p.getName();  

FileStatus您得到的對象可以告訴您,如果這是一個文件或目錄。

這裏是多個API文檔:

http://hadoop.apache.org/common/docs/r1.0.0/api/org/apache/hadoop/fs/Path.html

http://hadoop.apache.org/common/docs/r1.0.0/api/org/apache/hadoop/fs/FileStatus.html

+0

實際上:路徑P = ritr.next()的getPath(); – 2015-02-07 01:23:41

+0

@SabaJamalian好抓,固定。 – 2015-02-07 06:15:45