2015-09-02 58 views
0

我無法運行任何來自hive> shell的查詢。例如,即使簡單的東西,如hive命令 - 顯示錶或任何不起作用的指令

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:


我按照以下鏈接管理配置。

cloudera Mysql hive config


我想知道如何處理這種setUnknownTokenBoundaries()V方法?

我沒有更改ql.parse中的任何方法,因爲它們是內部的。

非常感謝。

回答

0

這不是Hive或mysql連接器的問題。

java.lang.NoSuchMethodError在針對某個庫版本進行編譯時發生,但針對不同版本運行。嘗試更新Java版本並在Hadoop上設置環境變量並嘗試運行Hive。

+0

非常感謝!是。我使用java 1.7和hive 0.14,可能編譯器無法挑選我在hive 0.14中的代碼。所以更新了Java 1.8並再次使用了配置單元。然後我們開始工作。 – Muthahar

+0

另外我相信這並不意味着蜂巢0.14只能在java 1.8中運行。它也可以在java 1.7中運行。可能是因爲我使用的配置單元已經在其他系統中用於java 1.8。 無論如何,問題現在解決了。非常感謝! – Muthahar

0

我認爲這個問題也可能是Hive及其對ANTLR的依賴性的一個更普遍的問題。就我而言,問題不是因爲某些環境變量,而是因爲ANTLR包含在使用Spark的應用程序的類路徑中,包括Hive及其依賴項。

ASTNode(Hive的一部分)擴展了CommonTree(ANTLR的一部分)。它繼承了方法setUnknownTokenBoundaries,它存在於更新版本的ANTLR中,如3.5.x,但在3.1.x中不存在。整理出ANTLR依賴關係解決了這個問題。