2011-09-26 3 views
3

을 사용자 정의 Writeable과 함께 읽으려고합니다. hasoop을 읽을 때 java.lang.NoClassDefFoundError SequenceFile

public static void main(String[] args) throws IOException { 
    //String iFile = null; 
    String uri = "/tmp/part-r-00000"; 
    Configuration conf = new Configuration(); 
    FileSystem fs = FileSystem.get(URI.create(uri), conf); 
    Path path = new Path(uri); 
    MyClass value = new MyClass(); 
    SequenceFile.Reader reader = null; 
    try { 
     reader = new Reader(fs, path, conf); 
     while(reader.next(value)){ 
      System.out.println(value.getUrl()); 
      System.out.println(value.getHeader()); 
      System.out.println(value.getImages().size());    
      break; 
     }   

    } catch (Exception e) {// Catch exception if any 
     System.err.println("Error: " + e.getMessage()); 
    } 
    finally { 
     IOUtils.closeStream(reader); 
    } 

} 

나는이 실행

, 나는 예외 다음 얻을 :

여기에 코드입니다

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/configuration/Configuration 
    at org.apache.hadoop.metrics2.lib.DefaultMetricsSystem.<init>(DefaultMetricsSystem.java:37) 
    at org.apache.hadoop.metrics2.lib.DefaultMetricsSystem.<clinit>(DefaultMetricsSystem.java:34) 
    at org.apache.hadoop.security.UgiInstrumentation.create(UgiInstrumentation.java:51) 
    at org.apache.hadoop.security.UserGroupInformation.initialize(UserGroupInformation.java:196) 
    at org.apache.hadoop.security.UserGroupInformation.ensureInitialized(UserGroupInformation.java:159) 
    at org.apache.hadoop.security.UserGroupInformation.isSecurityEnabled(UserGroupInformation.java:216) 
    at org.apache.hadoop.security.UserGroupInformation.getLoginUser(UserGroupInformation.java:409) 
    at org.apache.hadoop.security.UserGroupInformation.getCurrentUser(UserGroupInformation.java:395) 
    at org.apache.hadoop.fs.FileSystem$Cache$Key.<init>(FileSystem.java:1418) 
    at org.apache.hadoop.fs.FileSystem$Cache.get(FileSystem.java:1319) 
    at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:226) 
    at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:109) 
    at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:210) 
    at com.iathao.run.site.emr.DecryptMapReduceOutput.main(DecryptMapReduceOutput.java:32) 
Caused by: java.lang.ClassNotFoundException: org.apache.commons.configuration.Configuration 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:217) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:205) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:321) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:266) 
    ... 14 more 

모든 라이브러리는 jar 파일로 패키징 및 존재한다. 무엇이 잘못되었으며 어떻게 해결할 수 있습니까?

+1

lib의 jar 파일을 열면 클래스를 찾을 수 있습니까? org/apache/commons/configuration/Configuration 항아리 생성 방법은 무엇입니까? –

+0

hadoop jar가 classpath에 없습니다. 이걸 어떻게 달리고 있니? –

+0

알았습니다. 다음 라이브러리가 필요했습니다. http://www.java2s.com/Code/Jar/ABC/Downloadcommonsconfigurationjar.htm 프로그램이 제대로 실행됩니다. 그것은 이상하다. –

답변

4

org.apache.commons.configuration.Configuration 클래스에 hadoop-common - * .jar가 포함되어야합니다. jar 파일을 종속 파일로 저장하십시오.

관련 문제