0

我无法从shell运行任何查询。hive>例如,即使是简单的事情,例如

hive> select * from date;

解析完成后产生同样的错误:

select * from date 线程“main”中的异常 java.lang.NoSuchMethodError: org.apache.hadoop.hive.ql.parse.ASTNode.setUnknownTokenBoundaries()V at org.apache.hadoop.hive.ql.parse.ParseDriver.parse (ParseDriver.java:214) 在 org.apache.hadoop.hive.ql.parse.ParseDriver.parse(ParseDriver.java:166) 在 org.apache.hadoop.hive.ql.Driver.compile(Driver.java:389) ) 在 org.apache.hadoop.hive.ql.Driver.compileInternal(Driver.java:1067) 在 org.apache.hadoop 的 org.apache.hadoop.hive.ql.Driver.compile(Driver.java:303)。 hive.ql.Driver.runInternal(Driver.java:1129) at org.apache.hadoop.hive.ql.Driver.run(Driver.java:1004) at org.apache.hadoop.hive.ql.Driver.run( Driver.java:994) 在 org.apache.hadoop.hive.cli.CliDriver 的 org.apache.hadoop.hive.cli.CliDriver.processLocalCmd(CliDriver.java:247)。processCmd(CliDriver.java:199) at org.apache.hadoop.hive.cli.CliDriver.processLine(CliDriver.java:410) at org.apache.hadoop.hive.cli.CliDriver.executeDriver(CliDriver.java:783)在 org.apache.hadoop.hive.cli.CliDriver.run(CliDriver.java:677) 在 org.apache.hadoop.hive.cli.CliDriver.main(CliDriver.java:616) 在 sun.reflect.NativeMethodAccessorImpl.invoke0 (本机方法)在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:606 ) 在 org.apache.hadoop.util.RunJar.run(RunJar.java:221) 在 org.apache.hadoop.util.RunJar.main(RunJar.java:136)410)在 org.apache.hadoop.hive.cli.CliDriver.executeDriver(CliDriver.java:783) 在 org.apache.hadoop.hive.cli.CliDriver.run(CliDriver.java:677) 在 org.apache.hadoop .hive.cli.CliDriver.main(CliDriver.java:616) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:606) 在 org.apache.hadoop.util.RunJar.run(RunJar.java:221) 在 org.apache.hadoop。 util.RunJar.main(RunJar.java:136)410)在 org.apache.hadoop.hive.cli.CliDriver.executeDriver(CliDriver.java:783) 在 org.apache.hadoop.hive.cli.CliDriver.run(CliDriver.java:677) 在 org.apache.hadoop .hive.cli.CliDriver.main(CliDriver.java:616) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:606) 在 org.apache.hadoop.util.RunJar.run(RunJar.java:221) 在 org.apache.hadoop。 util.RunJar.main(RunJar.java:136)main(CliDriver.java:616) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)在 java.lang.reflect.Method.invoke(Method.java:606) 在 org.apache.hadoop.util.RunJar.run(RunJar.java:221) 在 org.apache.hadoop.util.RunJar.main(RunJar .java:136)main(CliDriver.java:616) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)在 java.lang.reflect.Method.invoke(Method.java:606) 在 org.apache.hadoop.util.RunJar.run(RunJar.java:221) 在 org.apache.hadoop.util.RunJar.main(RunJar .java:136)apache.hadoop.util.RunJar.main(RunJar.java:136)apache.hadoop.util.RunJar.main(RunJar.java:136)


以下是日志:

15/09/02 08:55:12 [main]:INFO hive.metastore:已连接到 Metastore。15/09/02 08:55:12 [main]:INFO session.SessionState:创建本地目录:/home/ETRI/hive/tmpdir/ETRI/f128f3e2-998f-4463-aa1b-8649db186945_resources 15/09/02 08: 55:12 [main]:INFO session.SessionState:创建的 HDFS 目录:/tmp/hive/ETRI/f128f3e2-998f-4463-aa1b-8649db186945 15/09/02 08:55:12 [main]:INFO session.SessionState :创建的本地目录:/home/ETRI/hive/tmpdir/ETRI/f128f3e2-998f-4463-aa1b-8649db186945 15/09/02 08:55:13 [main]:INFO session.SessionState:创建的 HDFS 目录:/tmp /hive/ETRI/f128f3e2-998f-4463-aa1b-8649db186945/_tmp_space.db 15/09/02 08:55:13 [main]:INFO session.SessionState:此时不需要 Tez 会话。hive.execution.engine=先生。15/09/02 08:55:13 [main]:INFO 日志。PerfLogger:15/09/02 08:55:13 [main]:INFO 日志。


我已按照以下链接管理配置。

cloudera Mysql配置单元配置


我想知道如何处理这种setUnknownTokenBoundaries()V方法?

我没有更改 ql.parse 中的任何方法,因为它们是内部的。

非常感谢。

4

2 回答 2

0

这不是 Hive 或 mysql 连接器的问题。

java.lang.NoSuchMethodError 在针对库的一个版本进行编译但针对不同版本运行时发生。尝试更新 Java 版本并在 Hadoop 上设置环境变量并尝试运行 Hive。

于 2015-09-03T06:41:19.523 回答
0

我认为所陈述的问题也可能是 Hive 及其对 ANTLR 的依赖的更普遍问题。就我而言,问题的发生不是因为某些环境变量,而是因为使用 Spark 的应用程序的类路径中包含了 ANTLR,包括 Hive 及其依赖项。

ASTNode(Hive 的一部分)正在扩展 CommonTree(ANTLR 的一部分)。它继承了setUnknownTokenBoundariesANTLR 较新版本(如 3.5.x)中存在的方法,但在 3.1.x 中没有。整理 ANTLR 依赖关系解决了这个问题。

于 2016-08-09T08:54:03.503 回答