2012-02-01 1 views
2

Maven을 사용하여 Hadoop 작업을 빌드하려고합니다. 이 작업은 Maven을 사용하지 않고 Eclipse에 Hadoop Jar 종속성을 직접 가져올 때 잘 작동합니다.Hadoop Maven 종속성 오류

또한 Hadoop 종속성이없는 Maven을 사용하여 간단한 jar (hello world type)를 만들 수 있습니다.

하지만 하둡 종속성을 추가하고 항아리를 실행할 때이 오류가 얻을 :

<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> 

어디 잘못 갈거야 :

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 

POM을 파일 변경이됩니다?

편집 : 지금은

, 나는 로컬 항아리를 실행하고 -하지 하둡에 있지만 로컬 데이터에. 그냥 같은 문제가 발생한 사람에 대한 해결책으로

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. –