Java Cloudera Quickstart VM illegalArguementException:错误的FS:hdfs:应为:文件:

Java Cloudera Quickstart VM illegalArguementException:错误的FS:hdfs:应为:文件:,java,eclipse,hadoop,cloudera-quickstart-vm,Java,Eclipse,Hadoop,Cloudera Quickstart Vm,我有一个简单的java代码将文本文件从本地复制到hdfs。我正在使用cloudera的quickstart虚拟机 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.

我有一个简单的java代码将文本文件从本地复制到hdfs。我正在使用cloudera的quickstart虚拟机

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)
我可能做错了什么?

路径不正确(“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());

我解决了这个问题。您必须小心添加到类路径中的jar文件类型,尤其是在使用cloudera quickstart vm时。如果可用,请使用cloudera提供的jar文件。它们可以在以下文件夹中找到:/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/"));

当我运行代码时,它会显示默认名称:“file:///”i replacement“hdfs://quickstart.cloudera:8020/user/cloudera/“与”file:///user/cloudera/... 然后我得到了一个新错误:“Mkdirs未能创建”file/user有趣的是,当我将您的行“stringuri=conf.get(fs.default.name”)更改为“stringuri=get(“fs.defaultFS”)时..默认名称已注册为hdfs://quickstart.cloudera:8020