2015-01-17 5 views
0

Я пытаюсь перечислить содержимое каталога, содержащегося внутри HDFS. Я пробовал следующий код:FileSystem listStatus throwing NullPointerException

public static void main(String[] args) throws IOException { 
    String uri = args[1]; 
    Configuration conf = new Configuration(); 
    FileSystem fs = FileSystem.get(URI.create(uri),conf); 

    for(int i=0;i<args.length;i++){ 
     System.out.println("Args: " + args[i]); 
    } 

    Path[] paths = new Path[args.length]; 
    for(int i=1; i<args.length;i++){ 
     paths[i] = new Path(args[i]); 
     System.out.println(paths[i]); 
    } 

    FileStatus[] status = fs.listStatus(paths); 
    Path[] listedPaths = FileUtil.stat2Paths(status); 
    for(Path p : listedPaths){ 
     System.out.println(p); 
    } 
} 

Но я получаю исключение:

Exception in thread "main" java.lang.NullPointerException 
    at org.apache.hadoop.fs.FileSystem.fixRelativePart(FileSystem.java:2198) 
    at org.apache.hadoop.hdfs.DistributedFileSystem.listStatus(DistributedFileSystem.java:697) 
    at org.apache.hadoop.fs.FileSystem.listStatus(FileSystem.java:1482) 
    at org.apache.hadoop.fs.FileSystem.listStatus(FileSystem.java:1559) 
    at org.apache.hadoop.fs.FileSystem.listStatus(FileSystem.java:1539) 
    at com.demo.ListStatusDemo.main(ListStatusDemo.java:29) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:606) 
    at org.apache.hadoop.util.RunJar.main(RunJar.java:212) 

Пожалуйста, дайте мне знать об этом.

ответ

2

Проблема здесь в вашем коде:

for(int i=1; i<args.length;i++){ 
    paths[i] = new Path(args[i]); 
.... 

, поскольку вы для цикла 1 на основе, вы оставили трактов [0] == NULL (то есть Unassigned)

+0

Я изменил индекс 'paths [i-1] = new Path (args [i]) ;, но все равно получающее то же исключение. Пожалуйста посоветуй. – user182944

+0

@ user182944, если вы выполняете 'paths [i-1]', тогда путь в 'paths [paths.length-1]' будет null, таким образом, исключение. –

+0

Да, просто {Path [] paths = new Path [args.length-1];} – yurgis

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