[HADOOP] Hadoop ClassNotFoundException
HADOOPHadoop ClassNotFoundException
내 첫 번째 Hadoop 응용 프로그램을 작성 중이며 오류가 발생합니다. 이 stack trace의 detial 중 일부가 의미하는 바를 잘 이해하지 못합니다. ClassNotFoundException입니다. 저는 Ubuntu Linux v12.10, Eclipse 3.8.0, Java 1.6.0_24에서이 작업을 수행하고 있습니다. Apache 사이트에서 Hadoop을 다운로드하고 Ant로 빌드하여 Hadoop을 설치했습니다.
내 사고는 프로그램을 만들 때 프로그램의 첫 번째 줄에 있습니다.
public static void main(String[] args) throws IOException, InterruptedException, ClassNotFoundException {
Job job = new Job(); <<== crashing here.
Program [Java Application]
com.sandbox.hadoop.Program at localhost:33878
Thread [main] (Suspended (exception ClassNotFoundException))
owns: Launcher$AppClassLoader (id=29)
owns: Class<T> (org.apache.hadoop.security.UserGroupInformation) (id=25)
URLClassLoader$1.run() line: 217
AccessController.doPrivileged(PrivilegedExceptionAction<T>, AccessControlContext) line: not available [native method]
Launcher$AppClassLoader(URLClassLoader).findClass(String) line: 205
Launcher$AppClassLoader(ClassLoader).loadClass(String, boolean) line: 321
Launcher$AppClassLoader.loadClass(String, boolean) line: 294
Launcher$AppClassLoader(ClassLoader).loadClass(String) line: 266
DefaultMetricsSystem.<init>() line: 37
DefaultMetricsSystem.<clinit>() line: 34
UgiInstrumentation.create(Configuration) line: 51
UserGroupInformation.initialize(Configuration) line: 216
UserGroupInformation.ensureInitialized() line: 184
UserGroupInformation.isSecurityEnabled() line: 236
KerberosName.<clinit>() line: 79
UserGroupInformation.initialize(Configuration) line: 209
UserGroupInformation.ensureInitialized() line: 184
UserGroupInformation.isSecurityEnabled() line: 236
UserGroupInformation.getLoginUser() line: 477
UserGroupInformation.getCurrentUser() line: 463
Job(JobContext).<init>(Configuration, JobID) line: 80
Job.<init>(Configuration) line: 50
Job.<init>() line: 46
Program.main(String[]) line: 17
/usr/lib/jvm/java-6-openjdk-amd64/bin/java (Jan 14, 2013 2:42:36 PM)
콘솔 출력 :
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:216)
at org.apache.hadoop.security.UserGroupInformation.ensureInitialized(UserGroupInformation.java:184)
at org.apache.hadoop.security.UserGroupInformation.isSecurityEnabled(UserGroupInformation.java:236)
at org.apache.hadoop.security.KerberosName.<clinit>(KerberosName.java:79)
at org.apache.hadoop.security.UserGroupInformation.initialize(UserGroupInformation.java:209)
at org.apache.hadoop.security.UserGroupInformation.ensureInitialized(UserGroupInformation.java:184)
at org.apache.hadoop.security.UserGroupInformation.isSecurityEnabled(UserGroupInformation.java:236)
at org.apache.hadoop.security.UserGroupInformation.getLoginUser(UserGroupInformation.java:477)
at org.apache.hadoop.security.UserGroupInformation.getCurrentUser(UserGroupInformation.java:463)
at org.apache.hadoop.mapreduce.JobContext.<init>(JobContext.java:80)
at org.apache.hadoop.mapreduce.Job.<init>(Job.java:50)
at org.apache.hadoop.mapreduce.Job.<init>(Job.java:46)
at com.sandbox.hadoop.Program.main(Program.java:18)
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)
... 16 more
해결법
-
==============================
1.이러한 종류의 클래스 경로 문제를 피하려면 /usr/lib/hadoop-0.xx/lib에있는 모든 jar 파일을 추가해야합니다.
이러한 종류의 클래스 경로 문제를 피하려면 /usr/lib/hadoop-0.xx/lib에있는 모든 jar 파일을 추가해야합니다.
아이디어를 얻으려면 hadoop classpath를 입력하면 Hadoop jar와 필요한 라이브러리를 얻는 데 필요한 클래스 경로가 출력된다.
귀하의 경우, hadoop-common-0.xx.jar가 누락되어 있으므로 classpath에이 파일을 추가해야합니다.
-
==============================
2.주 프로그램에 org.apache.commons.configuration.Configuration이 필요합니까, 아니면 org.apache.hadoop.conf.Configuration 여야합니까?
주 프로그램에 org.apache.commons.configuration.Configuration이 필요합니까, 아니면 org.apache.hadoop.conf.Configuration 여야합니까?
Eclipse에서 hadoop이 클러스터에서 실행될 때 classpath에없는 잘못된 Configuration 클래스를 자동으로 가져온 것처럼 보입니다.
소스 코드, 특히 com.sandbox.hadoop.Program 클래스, main 메소드를 공유 할 수 있습니까?
-
==============================
3.나는 같은 문제에 직면했다. 필자는 commons-configuration-x.x.jar를 빌드 경로에 추가하여 문제를 해결했다. $ HADOOP_HOME / lib에있다.
나는 같은 문제에 직면했다. 필자는 commons-configuration-x.x.jar를 빌드 경로에 추가하여 문제를 해결했다. $ HADOOP_HOME / lib에있다.
from https://stackoverflow.com/questions/14326459/hadoop-classnotfoundexception by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] Hadoop은 Datajoin을 사용하여 측면 조인을 줄입니다. (0) | 2019.06.12 |
---|---|
[HADOOP] org.apache.hadoop.conf.Configuration은 hadoop-core.jar에 존재하지 않습니다. (0) | 2019.06.12 |
[HADOOP] Spark 작업으로 제출 될 때 Spark RDD 맵의 NullPointerException (0) | 2019.06.11 |
[HADOOP] PL / SQL을 하이브 QL로 변환 (0) | 2019.06.11 |
[HADOOP] saveAsTextFile을 사용하여 NullPointerException을 발생시킵니다. (0) | 2019.06.11 |