[hive on tez] "main" java.lang.NoClassDefFoundError 오류
이런 오류가 난다면. tez-0.8.2-minimal.tar.gz 이런 파일을 압축을 실행하는 서버에 풀고
해당 폴더랑 /lib 폴더, 그리고 tez-site.xml 가 있는 폴더를 ${HADOOP_CLASSPATH} 에 잡아줘야한다.
hive> set hive.execution.engine=tez;
hive> select count(*) from sample_08;
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/tez/dag/api/client/StatusGetOpts
at java.lang.Class.getDeclaredConstructors0(Native Method)
at java.lang.Class.privateGetDeclaredConstructors(Class.java:2532)
at java.lang.Class.getConstructor0(Class.java:2842)
at java.lang.Class.newInstance(Class.java:345)
at org.apache.hadoop.hive.ql.exec.TaskFactory.get(TaskFactory.java:136)
at org.apache.hadoop.hive.ql.exec.TaskFactory.get(TaskFactory.java:150)
at org.apache.hadoop.hive.ql.parse.GenTezProcContext.<init>(GenTezProcContext.java:160)
at org.apache.hadoop.hive.ql.parse.TezCompiler.generateTaskTree(TezCompiler.java:325)
at org.apache.hadoop.hive.ql.parse.TaskCompiler.compile(TaskCompiler.java:204)
at org.apache.hadoop.hive.ql.parse.SemanticAnalyzer.analyzeInternal(SemanticAnalyzer.java:10265)
at org.apache.hadoop.hive.ql.parse.CalcitePlanner.analyzeInternal(CalcitePlanner.java:192)
at org.apache.hadoop.hive.ql.parse.BaseSemanticAnalyzer.analyze(BaseSemanticAnalyzer.java:222)
at org.apache.hadoop.hive.ql.Driver.compile(Driver.java:423)
at org.apache.hadoop.hive.ql.Driver.compile(Driver.java:307)
at org.apache.hadoop.hive.ql.Driver.compileInternal(Driver.java:1112)
at org.apache.hadoop.hive.ql.Driver.runInternal(Driver.java:1160)
at org.apache.hadoop.hive.ql.Driver.run(Driver.java:1049)
at org.apache.hadoop.hive.ql.Driver.run(Driver.java:1039)
at org.apache.hadoop.hive.cli.CliDriver.processLocalCmd(CliDriver.java:207)
at org.apache.hadoop.hive.cli.CliDriver.processCmd(CliDriver.java:159)
at org.apache.hadoop.hive.cli.CliDriver.processLine(CliDriver.java:370)
at org.apache.hadoop.hive.cli.CliDriver.executeDriver(CliDriver.java:756)
at org.apache.hadoop.hive.cli.CliDriver.run(CliDriver.java:675)
at org.apache.hadoop.hive.cli.CliDriver.main(CliDriver.java:615)
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.run(RunJar.java:221)
at org.apache.hadoop.util.RunJar.main(RunJar.java:136)
Caused by: java.lang.ClassNotFoundException: org.apache.tez.dag.api.client.StatusGetOpts
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
... 30 more
?
압축풀고 같은 폴더에 xml 까지 같이 저장했다면 이런식으로 해서 path를 잡아주고 hive를 실행후 다시 하면
실행된다.
export HADOOP_CLASSPATH=${HADOOP_CLASSPATH}:/tez-jars/0.8.2:/tez-jars/0.8.2/*:/tez-jars/0.8.2/lib/*
hive> set hive.execution.engine=tez;
hive> select count(*) from sample_08;
Query ID = user_20160226194949_5aa1a912-ec1e-410b-b75e-a5b16a642e37
Total jobs = 1
Launching Job 1 out of 1
Status: Running (Executing on YARN cluster with App id application_1456312052443_0137)
--------------------------------------------------------------------------------
VERTICES STATUS TOTAL COMPLETED RUNNING PENDING FAILED KILLED
--------------------------------------------------------------------------------
Map 1 .......... SUCCEEDED 1 1 0 0 0 0
Reducer 2 ...... SUCCEEDED 1 1 0 0 0 0
--------------------------------------------------------------------------------
VERTICES: 02/02 [==========================>>] 100% ELAPSED TIME: 6.08 s
--------------------------------------------------------------------------------
OK
823
Time taken: 12.863 seconds, Fetched: 1 row(s)
hive>