我无法从hive>
shell运行任何查询。例如,即使是简单的事情,例如
hive> select * from date;
解析完成后,产生相同的错误:
从日期中选择* 线程“main”中的异常java.lang.NoSuchMethodError:org.apache.hadoop.hive.ql.parse.ASTNode.setUnknownTokenBoundaries()V 在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.compile(Driver.java:303) 在org.apache.hadoop.hive.ql.Driver.compileInternal(Driver.java:1067) 在org.apache.hadoop.hive.ql.Driver.runInternal(Driver.java:1129) 在org.apache.hadoop.hive.ql.Driver.run(Driver.java:1004) 在org.apache.hadoop.hive.ql.Driver.run(Driver.java:994) 在org.apache.hadoop.hive.cli.CliDriver.processLocalCmd(CliDriver.java:247) 在org.apache.hadoop.hive.cli.CliDriver.processCmd(CliDriver.java:199) 在org.apache.hadoop.hive.cli.CliDriver.processLine(CliDriver.java: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) 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) 在org.apache.hadoop.util.RunJar.run(RunJar.java:221) 在org.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 log.PerfLogger: 15/09/02 08:55:13 [main]:INFO log.PerfLogger: 15/09/02 08:55:13 [main]:INFO ql.Driver:禁用并发模式,不创建锁管理器 15/09/02 08:55:13 [main]:INFO log.PerfLogger: 15/09/02 08:55:13 [main]:INFO log.PerfLogger: 15/09/02 08:55:13 [main]:INFO parse.ParseDriver:解析命令:show tables 15/09/02 08:55:13 [main]:INFO parse.ParseDriver:Parse Completed 15/09/02 08:55:13 [主要]:INFO log.PerfLogger:
我根据以下链接管理了配置。
我想知道如何处理这个setUnknownTokenBoundaries()V
方法?
我没有更改ql.parse中的任何方法,因为它们是内部的。
非常感谢。
答案 0 :(得分:0)
这不是Hive或mysql连接器的问题。
java.lang.NoSuchMethodError在针对一个版本的库进行编译但针对不同版本运行时发生。尝试更新Java版本并在Hadoop上设置环境变量并尝试运行Hive。
答案 1 :(得分:0)
我认为所述问题也可能是Hive及其对ANTLR依赖的更普遍问题。就我而言,问题不是因为某些环境变量而是因为ANTLR包含在使用Spark的应用程序的类路径中,包括Hive及其依赖项。
ASTNode(Hive的一部分)正在扩展CommonTree(ANTLR的一部分)。它继承了方法setUnknownTokenBoundaries
,它存在于较新版本的ANTLR中,如3.5.x但在3.1.x中没有。排除ANTLR依赖关系解决了这个问题。