hive 命令 - 显示表或任何不起作用的命令

hive command - Show tables or any command not working

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

hive> select * from date;

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

select * from date Exception in thread "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) at org.apache.hadoop.hive.ql.parse.ParseDriver.parse(ParseDriver.java:166) at org.apache.hadoop.hive.ql.Driver.compile(Driver.java:389) at org.apache.hadoop.hive.ql.Driver.compile(Driver.java:303) at org.apache.hadoop.hive.ql.Driver.compileInternal(Driver.java:1067) at org.apache.hadoop.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) at org.apache.hadoop.hive.cli.CliDriver.processLocalCmd(CliDriver.java:247) at org.apache.hadoop.hive.cli.CliDriver.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) at org.apache.hadoop.hive.cli.CliDriver.run(CliDriver.java:677) at 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) at org.apache.hadoop.util.RunJar.run(RunJar.java:221) at org.apache.hadoop.util.RunJar.main(RunJar.java:136)


这是日志:

15/09/02 08:55:12 [main]: INFO hive.metastore: Connected to metastore. 15/09/02 08:55:12 [main]: INFO session.SessionState: Created local directory: /home/ETRI/hive/tmpdir/ETRI/f128f3e2-998f-4463-aa1b-8649db186945_resources 15/09/02 08:55:12 [main]: INFO session.SessionState: Created HDFS directory: /tmp/hive/ETRI/f128f3e2-998f-4463-aa1b-8649db186945 15/09/02 08:55:12 [main]: INFO session.SessionState: Created local directory: /home/ETRI/hive/tmpdir/ETRI/f128f3e2-998f-4463-aa1b-8649db186945 15/09/02 08:55:13 [main]: INFO session.SessionState: Created HDFS directory: /tmp/hive/ETRI/f128f3e2-998f-4463-aa1b-8649db186945/_tmp_space.db 15/09/02 08:55:13 [main]: INFO session.SessionState: No Tez session required at this point. hive.execution.engine=mr. 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: Concurrency mode is disabled, not creating a lock manager 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: Parsing command: show tables 15/09/02 08:55:13 [main]: INFO parse.ParseDriver: Parse Completed 15/09/02 08:55:13 [main]: INFO log.PerfLogger:


我已经按照以下link管理配置。

cloudera Mysql hive config


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

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

非常感谢。

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

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

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

ASTNode(Hive 的一部分)正在扩展 CommonTree(ANTLR 的一部分)。它继承了 setUnknownTokenBoundaries 方法,该方法出现在较新版本的 ANTLR 中,例如 3.5.x,但在 3.1.x 中没有。整理ANTLR依赖解决了问题。