4

我可以使用 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

这是成功的。

但是当我使用使用附加代码创建的 jar 时无法运行它,这也是一个示例 wordcount 示例 代码

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,预期:org.apache.hadoop.fs.FileSystem.checkPath(FileSystem.java:657 处的 hdfs://10.30.60.45:8020 ) at org.apache.hadoop.hdfs.DistributedFileSystem.getPathName(DistributedFileSystem.java:194) at org.apache.hadoop.hdfs.DistributedFileSystem.access$000(DistributedFileSystem.java:106) at org.apache.hadoop.hdfs.DistributedFileSystem $19.doCall(DistributedFileSystem.java:1215) at org.apache.hadoop.hdfs.DistributedFileSystem $19.doCall(DistributedFileSystem.java:1211) at org.apache.hadoop.fs.FileSystemLinkResolver.resolve(FileSystemLinkResolver.java:81) at org.apache.hadoop.hdfs.DistributedFileSystem.getFileStatus(DistributedFileSystem.java:1211) at org.apache.hadoop.fs.FileSystem.exists(FileSystem.java:1412) at edu。WordCount.run(WordCount.java:47) at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70) at edu.WordCount.main(WordCount.java:23) at sun.reflect.NativeMethodAccessorImpl.invoke0 (本机方法)在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 在 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)invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:601) at org.apache.hadoop.util.RunJar .run(RunJar.java:221) 在 org.apache.hadoop.util.RunJar.main(RunJar.java:136)invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:601) at org.apache.hadoop.util.RunJar .run(RunJar.java:221) 在 org.apache.hadoop.util.RunJar.main(RunJar.java:136)

4

1 回答 1

2

问题来自于调用

FileSystem fs = FileSystem.get(conf);

在第 101 行。FileSystem创建者FileSystem.get(conf)将仅支持具有 Hadoopfs.defaultFS属性定义的方案的路径。要修复错误,请将该行更改为

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

通过传递 a URI,您可以覆盖fs.defaultFS,使 createdFileSystem支持使用该alluxio://方案的路径。

您也可以通过修改fs.defaultFS您的core-site.xml

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

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

于 2018-10-03T20:33:17.843 回答