1

Hadoop ヤーンを新しくインストールし、指定された jar ファイルを介して wordcount の例を実行しましたが、 wordcount ソースhadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples...をコンパイルして実行しようとすると、.java.io.IOException: No FileSystem for scheme: hdfs

上記の例外は、次のコード行に関連しています。

FileInputFormat.addInputPath(job, new Path(args[0]));

編集:コマンドと出力は次のとおりです。

hduser@master-virtual-machine:~$ hadoop jar Desktop/NativeWordcount.jar /tin /tout
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [rsrc:org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:rsrc:slf4j-log4j12-1.7.5.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory]
13/12/03 07:14:44 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Exception in thread "main" java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoader.java:58)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.apache.hadoop.util.RunJar.main(RunJar.java:212)
Caused by: java.io.IOException: No FileSystem for scheme: hdfs
    at org.apache.hadoop.fs.FileSystem.getFileSystemClass(FileSystem.java:2421)
    at org.apache.hadoop.fs.FileSystem.createFileSystem(FileSystem.java:2428)
    at org.apache.hadoop.fs.FileSystem.access$200(FileSystem.java:88)
    at org.apache.hadoop.fs.FileSystem$Cache.getInternal(FileSystem.java:2467)
    at org.apache.hadoop.fs.FileSystem$Cache.get(FileSystem.java:2449)
    at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:367)
    at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:166)
    at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:351)
    at org.apache.hadoop.fs.Path.getFileSystem(Path.java:287)
    at org.apache.hadoop.mapreduce.lib.input.FileInputFormat.addInputPath(FileInputFormat.java:466)
    at WordCount.main(WordCount.java:55)
    ... 10 more
4

1 に答える 1

7

今日もこの問題に遭遇しました。hadoop-hdfs jar がクラスパスにあることを確認する必要があります。

これに対する私の最初のブラシは、Maven のパッケージで自分のプロジェクトに依存関係を追加することhadoop-hdfsでしたが、これでは不十分でした。結局、 Cloudera のアドバイスに従い、への依存関係を追加しましたhadoop-clientpom.xmlファイルに関連する条項は次のとおりです。

 <dependency>
    <groupId>org.apache.hadoop</groupId>
    <artifactId>hadoop-client</artifactId>
    <version>VERSION</version>
 </dependency>

Leiningen を使用して Clojure でこれを行っていたので、project.clj代わりにこれをファイルに追加しました。

(defproject 
  ; ...
  :dependencies [[org.apache.hadoop/hadoop-client "VERSION"]
                 ; ...
                 ])

(もちろん、バージョンはシステムに何がインストールされているかによって異なります。現時点で 2.x シリーズの唯一のリリース バージョンは です2.2.0。)

于 2014-02-03T15:46:57.360 に答える