我可以使用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)
答案 0 :(得分:1)
问题出在
FileSystem fs = FileSystem.get(conf);
。由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()
的第一种方法