2013-08-03 6 views

ответ

6

Использование HDFS API:

package org.myorg.hdfsdemo; 

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStreamReader; 

import org.apache.hadoop.conf.Configuration; 
import org.apache.hadoop.fs.FileStatus; 
import org.apache.hadoop.fs.FileSystem; 
import org.apache.hadoop.fs.Path; 



public class HdfsDemo { 

    public static void main(String[] args) throws IOException { 

     Configuration conf = new Configuration(); 
     conf.addResource(new Path("/Users/miqbal1/hadoop-eco/hadoop-1.1.2/conf/core-site.xml")); 
     conf.addResource(new Path("/Users/miqbal1/hadoop-eco/hadoop-1.1.2/conf/hdfs-site.xml")); 
     FileSystem fs = FileSystem.get(conf); 
     System.out.println("Enter the directory name :"); 
     BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 
     Path path = new Path(br.readLine()); 
     displayDirectoryContents(fs, path); 
    } 

    private static void displayDirectoryContents(FileSystem fs, Path rootDir) { 
     // TODO Auto-generated method stub 
     try { 

      FileStatus[] status = fs.listStatus(rootDir); 
      for (FileStatus file : status) { 
       if (file.isDir()) { 
        System.out.println("This is a directory:" + file.getPath()); 
        displayDirectoryContents(fs, file.getPath()); 
       } else { 
        System.out.println("This is a file:" + file.getPath()); 
       } 
      } 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
} 
+3

@Peter Shipilo: одна небольшая коррекция, не забудьте закрыть экземпляр FileSystem. – Tariq

+0

Спасибо, что сильно изменились. Я попробую этот код позже. –

+0

И вам нужны правильные зависимости для hadoop-hdfs, среди прочих. – Mahdi

1

Writer рекурсивная функция, которая берет файл и проверяет, является ли его каталог или нет, если каталог содержит список всех файлов в нем и в цикле for проверяет, является ли файл каталогом, а затем рекурсивно вызывает или просто возвращает список файлы.

Что-то вроде этого ниже, но не совсем то же самое (здесь я возвращаюсь только .java файлы)

private static List<File> recursiveDir(File file) { 
    if (!file.isDirectory()) { 
//   System.out.println("[" + file.getName() + "] is not a valid directory"); 
     return null; 
    } 

    List<File> returnList = new ArrayList<File>(); 
    File[] files = file.listFiles(); 
    for (File f : files) { 
     if (!f.isDirectory()) { 
      if (f.getName().endsWith("java")) { 
       returnList.add(f); 
      } 
     } else { 
      returnList.addAll(recursiveDir(f)); 
     } 
    } 
    return returnList; 
} 
+0

Спасибо, но я в поиске, как сделать это с помощью Apache Hadoop. Но теперь я знаю решение. –

0

с HDFS можно использовать Hadoop фс -ЛРС.

+0

Или 'hdfs dfs ls -R' - но это не дает нам Абсолютный Путь, не так ли? –

+0

Вопрос об API, а не клиенте CLI. –

Смежные вопросы