Быстрый запуск Cloudera VM invalidArguementException: Неверная файловая система: hdfs: ожидается: файл:

У меня есть простой код Java для копирования текстового файла из моего локального в hdfs. Я использую виртуальную машину быстрого запуска Cloudera.

Configuration conf = new Configuration();
conf.addResource(new Path("/etc/hadoop/conf/core-site.xml"));
conf.addResource(new Path("/etc/hadoop/conf/hdfs-site.xml"));
FileSystem fs = FileSystem.get(conf);
fs.copyFromLocalFile(new Path("/home/cloudera/workspace/Downloader/output/data.txt"), 
                          new Path("hdfs://quickstart.cloudera:8020/user/cloudera/"));

Я получаю эту ошибку после запуска этого кода:

Exception in thread "main" java.lang.IllegalArgumentException: Wrong FS: hdfs://quickstart.cloudera:8020/user/cloudera, expected: file:///
at org.apache.hadoop.fs.FileSystem.checkPath(FileSystem.java:381)
at org.apache.hadoop.fs.RawLocalFileSystem.pathToFile(RawLocalFileSystem.java:55)
at org.apache.hadoop.fs.LocalFileSystem.pathToFile(LocalFileSystem.java:61)
at org.apache.hadoop.fs.LocalFileSystem.exists(LocalFileSystem.java:51)
at org.apache.hadoop.fs.FileUtil.checkDest(FileUtil.java:355)
at org.apache.hadoop.fs.FileUtil.copy(FileUtil.java:211)
at org.apache.hadoop.fs.FileUtil.copy(FileUtil.java:163)
at org.apache.hadoop.fs.LocalFileSystem.copyFromLocalFile(LocalFileSystem.java:67)
at org.apache.hadoop.fs.FileSystem.copyFromLocalFile(FileSystem.java:1143)

Что я могу делать неправильно?


person Free Man    schedule 21.10.2015    source источник


Ответы (2)


Я решил эту проблему. Вы должны быть осторожны с файлами jar, которые вы добавляете в свой путь к классам, особенно при работе с cloudera quickstart vm. Если возможно, используйте jar-файлы, предоставленные cloudera. Их можно найти в этой папке: /usr/lib/hadoop/client/ Этот код будет работать без проблем.

Configuration conf = new Configuration();
conf.addResource(new Path("/etc/hadoop/conf/core-site.xml"));
conf.addResource(new Path("/etc/hadoop/conf/hdfs-site.xml"));
FileSystem fs = FileSystem.get(conf);
fs.copyFromLocalFile(new Path("/home/cloudera/workspace/Downloader/output/data.txt"), 
                      new Path("hdfs://quickstart.cloudera:8020/user/cloudera/"));
person Free Man    schedule 21.10.2015

Неверный путь ("hdfs://quickstart.cloudera:8020/user/cloudera/", используйте этот пример:

Configuration conf = getConf();
System.out.println("fs.default.name : - " + conf.get("fs.default.name"));
// It prints uri  as : hdfs://10.214.15.165:9000 or something...
String uri = conf.get("fs.default.name");
FileSystem fs = FileSystem.get(uri,getConf());
person Fortran    schedule 21.10.2015
comment
когда я запускаю ваш код, он говорит, что имя по умолчанию: файл: /// - person Free Man; 21.10.2015
comment
Я заменил hdfs://quickstart.cloudera:8020/user/cloudera/ на file:///user/cloudera/... Затем я получил новую ошибку: Mkdirs не удалось создать файл/пользователя - person Free Man; 21.10.2015
comment
интересно, когда я изменил вашу строку String uri = conf.get(fs.default.name) на String uri = get (fs.defaultFS) .... имя по умолчанию было прописано как hdfs://quickstart.cloudera:8020 - person Free Man; 21.10.2015