Проблемы с эмуляцией команды "hdfs dfs -ls -R /" в Java - PullRequest
0 голосов
/ 30 сентября 2019

Я пытаюсь программно получить все файлы по заданному пути, используя код Java

 public static List<String> listFilesFromHDFSPath(Configuration hadoopConfiguration, String hdfsPath)
            throws IOException, IllegalArgumentException {

        List<String> filePaths = new ArrayList<String>();
        Path path = new Path(hdfsPath);
        FileSystem fs = path.getFileSystem(hadoopConfiguration);
        if(fs.isDirectory(path)){
           FileStatus[] fileStatuses = fs.listStatus(path);
           for(FileStatus fileStatus : fileStatuses){
             if(fileStatus.isFile())
               filePaths.add(fileStatus.getPath().toString());
          }
        }
        else {
          filePaths.add(path.toString());
        }
        fs.close();
        return filePaths;
    }

Но этот подход сейчас работает для меня, процесс умирает после строки:

FileSystem fs = path.getFileSystem(hadoopConfiguration);

Итак, я пытался получить эквивалентную команду "hdfs dfs -ls -R" в java, такую ​​же, как в Scala:

import scala.sys.process._
val lsResult = Seq("hdfs","dfs","-ls","-R","hdfs://path/demo/").!!

Есть ли что-то подобное для java?

...