【问题标题】:Cloudera Quickstart VM illegalArguementException: Wrong FS: hdfs: expected: file:Cloudera 快速入门 VM 非法ArguementException:错误的 FS:hdfs:预期:文件:
【发布时间】:2015-10-22 05:18:42
【问题描述】:

我有一个简单的 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)

我做错了什么?

【问题讨论】:

    标签: java eclipse hadoop cloudera-quickstart-vm


    【解决方案1】:

    我解决了这个问题。您必须小心添加到类路径中的 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/"));
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 当我运行你的代码时,它说默认名称是:“file:///”
      • 我将“hdfs://quickstart.cloudera:8020/user/cloudera/”替换为“file:///user/cloudera/...”然后出现新错误:“Mkdirs failed创建“文件/用户
      • 有趣的是,当我将您的行“String uri = conf.get(fs.default.name") 更改为“String uri = get ("fs.defaultFS") .... 默认名称注册为 hdfs://quickstart.cloudera:8020
      猜你喜欢
      • 1970-01-01
      • 2018-09-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-26
      相关资源
      最近更新 更多