2012-02-01 19 views
2

Mavenを使用してHadoopジョブを構築しようとしています。この仕事は、私がMavenを使用せず、EclipseへのHadoop Jarの依存関係を直接インポートするときにうまく機能します。Hadoop Maven依存エラー

また、Hadoopの依存関係がなくても、Mavenを使って簡単なjar(hello world type)を構築することができます。

しかし、私はHadoopの依存関係を追加し、jarファイルを実行すると、私はこのエラーを取得:

dataException in thread "main" java.lang.NoClassDefFoundError: org/apache/hadoop/conf/Configuration 
    at org.graphhadoop.CreateAdjacency.Adjacency(CreateAdjacency.java:74) 
    at org.graphhadoop.Driver.main(Driver.java:12) 
Caused by: java.lang.ClassNotFoundException: org.apache.hadoop.conf.Configuration 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247) 
    ... 2 more 

ポンポンファイルの変更は、これらは、以下のとおりです。

私は間違っているつもりです
<dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     <version>3.8.1</version> 
     <scope>test</scope> 
     </dependency> 
    <dependency> 
     <groupId>org.apache.hadoop</groupId> 
     <artifactId>hadoop-core</artifactId> 
     <version>0.20.203.0</version> 
     </dependency> 
    </dependencies> 

<build> 
    <plugins> 
     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-jar-plugin</artifactId> 
     <configuration> 
      <archive> 
      <manifest> 
       <addClasspath>true</addClasspath> 
       <mainClass>org.graphhadoop.Driver</mainClass> 
      </manifest> 
      </archive> 
      <manifestEntries> 
      <Class-Path>../target/classes</Class-Path> 
     </manifestEntries> 
     </configuration> 
     </plugin> 
    </plugins> 
    </build> 

編集:

今、私はローカルジャーを実行している場合 - ではないHadoopの上、ローカルデータに。

java -jar jarname.jar 
+0

どのように実行していますか? –

+0

hadoop -jar jarname.jar – Gitmo

+0

すべての依存関係を持つjarファイルを作成している場合を除き、実行クラスパスに依存する必要があります。 –

答えて

2

ちょうど同じ問題に遭遇した誰かの解決策として、ここでそれを解決するものです:

これらの依存関係はのpom.xmlに追加する必要があります。

 <dependency> 
     <groupId>org.codehaus.jackson</groupId> 
     <artifactId>jackson-mapper-asl</artifactId> 
     <version>1.5.2</version> 
     </dependency> 

     <dependency> 
     <groupId>net.sf.json-lib</groupId> 
     <artifactId>json-lib</artifactId> 
     <version>2.3</version> 
     <classifier>jdk15</classifier> 
     </dependency> 

     <dependency> 
     <groupId>org.apache.hadoop</groupId> 
     <artifactId>hadoop-core</artifactId> 
     <version>0.20.203.0</version> 
     </dependency> 
    </dependencies> 

、これらはプラグインをビルドします:

<build> 
    <plugins> 
    <plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-assembly-plugin</artifactId> 
     <executions> 
     <execution> 
     <goals> 
      <goal>attached</goal> 
     </goals> 
     <phase>package</phase> 
     <configuration> 
      <descriptorRefs> 
      <descriptorRef>jar-with-dependencies</descriptorRef> 
      </descriptorRefs> 
      <archive> 
      <manifest> 
       <addClasspath>true</addClasspath> 
       <mainClass>org.lll..</mainClass> 
      </manifest> 
     <manifestEntries> 
      <Class-Path>../target/classes</Class-Path> 
      </manifestEntries> 
      </archive> 
     </configuration> 
     </execution> 
    </executions> 
     </plugin> 
     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-jar-plugin</artifactId> 
     <configuration> 
      <archive> 
      <manifest> 
       <addClasspath>true</addClasspath> 
      <mainClass>org...</mainClass> 
      </manifest> 
      </archive> 
     <manifestEntries> 
      <Class-Path>../target/classes</Class-Path> 
     </manifestEntries> 
     </configuration> 
     </plugin> 
    </plugins> 
</build> 
+0

素晴らしいです。うまくいきました - + 1。 –