Alluxio错误:java.lang.IllegalArgumentException:错误的FS

时间:2016-12-23 04:43:01

标签: hadoop mapreduce hdfs cloudera-cdh alluxio

我可以使用cloudera提供的示例jar在alluxio上运行wordcount,使用:

sudo -u hdfs hadoop jar /usr/lib/hadoop-0.20-mapreduce/hadoop-examples.jar wordcount -libjars /home/nn1/alluxio-1.2.0/core/client/target/alluxio-core-client-1.2.0-jar-with-dependencies.jar alluxio://nn1:19998/wordcount alluxio://nn1:19998/wc1

这是成功的。

但是当我使用使用ATTACHED CODE创建的jar时,我无法运行它。这也是一个示例wordcount示例 code

sudo -u hdfs hadoop jar /home/nn1/HadoopWordCount-0.0.1-SNAPSHOT-jar-with-dependencies.jar edu.am.bigdata.C45TreeModel.C45DecisionDriver -libjars /home/nn1/alluxio-1.2.0/core/client/target/alluxio-core-client-1.2.0-jar-with-dependencies.jar alluxio://10.30.60.45:19998/abdf alluxio://10.30.60.45:19998/outabdf

上面的代码是使用maven构建的 Pom.xml文件包含

 <dependency>
    <groupId>org.apache.hadoop</groupId>
    <artifactId>hadoop-core</artifactId>
    <version>2.6.0-mr1-cdh5.4.5</version>
     </dependency>
     <dependency>
    <groupId>org.apache.hadoop</groupId>
    <artifactId>hadoop-common</artifactId>
    <version>2.6.0-cdh5.4.5</version>
     </dependency>

请你帮我在alluxio集群中运行我的wordcount程序。希望没有额外的配置添加到pom文件中以便运行它。

运行我的jar后出现以下错误:

  

java.lang.IllegalArgumentException:错误的FS:   alluxio://10.30.60.45:19998 / outabdf,预计:hdfs://10.30.60.45:8020       在org.apache.hadoop.fs.FileSystem.checkPath(FileSystem.java:657)       at org.apache.hadoop.hdfs.DistributedFileSystem.getPathName(DistributedFileSystem.java:194)       在org.apache.hadoop.hdfs.DistributedFileSystem.access $ 000(DistributedFileSystem.java:106)       在org.apache.hadoop.hdfs.DistributedFileSystem $ 19.doCall(DistributedFileSystem.java:1215)       在org.apache.hadoop.hdfs.DistributedFileSystem $ 19.doCall(DistributedFileSystem.java:1211)       在org.apache.hadoop.fs.FileSystemLinkResolver.resolve(FileSystemLinkResolver.java:81)       在org.apache.hadoop.hdfs.DistributedFileSystem.getFileStatus(DistributedFileSystem.java:1211)       在org.apache.hadoop.fs.FileSystem.exists(FileSystem.java:1412)       在edu.WordCount.run(WordCount.java:47)       在org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70)       在edu.WordCount.main(WordCount.java:23)       at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)       at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)       at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)       在java.lang.reflect.Method.invoke(Method.java:601)       在org.apache.hadoop.util.RunJar.run(RunJar.java:221)       在org.apache.hadoop.util.RunJar.main(RunJar.java:136)

1 个答案:

答案 0 :(得分:1)

问题出在

FileSystem fs = FileSystem.get(conf);

在第101行上的

。由FileSystem创建的FileSystem.get(conf)仅支持具有Hadoop fs.defaultFS属性定义的方案的路径。要解决该错误,请将该行更改为

FileSystem fs = FileSystem.get(URI.create("alluxio://nn1:19998/", conf)

通过传递URI,您将覆盖fs.defaultFS,从而使创建的FileSystem支持使用alluxio://方案的路径。

您还可以通过修改fs.defaultFS中的core-site.xml来纠正错误

<property>
  <name>fs.defaultFS</name>
  <value>alluxio://nn1:19998/</value>
</property>

但是,这可能会影响共享core-site.xml文件的其他系统,因此,我建议将alluxio:// URI传递到FileSystem.get()的第一种方法