天天看點

java 連接配接hive2,無法通過JAVA連接配接到HIVE2

java 連接配接hive2,無法通過JAVA連接配接到HIVE2
java 連接配接hive2,無法通過JAVA連接配接到HIVE2

Referring to Hive2 created a simple java program to connect to HIVE2 server (not local) have added all mentioned jars in the above link in the class path in eclipse as well however when I run the code it throws an error as:

09:42:35,580 INFO Utils:285 - Supplied authorities: hdstg-c01-edge-03:20000

09:42:35,583 INFO Utils:372 - Resolved authority: hdstg-c01-edge-03:20000

09:42:35,656 INFO HiveConnection:189 - Will try to open client transport with JDBC Uri: jdbc:hive2://hdstg-c01-edge-03:20000

FAILED: f

java.lang.NoSuchMethodError: org.apache.thrift.protocol.TProtocol.getScheme()Ljava/lang/Class;

at org.apache.hive.service.cli.thrift.TCLIService$OpenSession_args.write(TCLIService.java:1854)

at org.apache.thrift.TServiceClient.sendBase(TServiceClient.java:63)

at org.apache.hive.service.cli.thrift.TCLIService$Client.send_OpenSession(TCLIService.java:150)

at org.apache.hive.service.cli.thrift.TCLIService$Client.OpenSession(TCLIService.java:142)

at org.apache.hive.jdbc.HiveConnection.openSession(HiveConnection.java:456)

at org.apache.hive.jdbc.HiveConnection.(HiveConnection.java:178)

at org.apache.hive.jdbc.HiveDriver.connect(HiveDriver.java:105)

at java.sql.DriverManager.getConnection(DriverManager.java:579)

at java.sql.DriverManager.getConnection(DriverManager.java:221)

at testScripts.HiveJdbcClient.f(HiveJdbcClient.java:19)

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:601)

at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:85)

at org.testng.internal.Invoker.invokeMethod(Invoker.java:648)

at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:834)

at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1142)

at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:124)

at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:108)

at org.testng.TestRunner.privateRun(TestRunner.java:771)

at org.testng.TestRunner.run(TestRunner.java:621)

at org.testng.SuiteRunner.runTest(SuiteRunner.java:357)

at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:352)

at org.testng.SuiteRunner.privateRun(SuiteRunner.java:310)

at org.testng.SuiteRunner.run(SuiteRunner.java:259)

at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)

at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86)

at org.testng.TestNG.runSuitesSequentially(TestNG.java:1176)

at org.testng.TestNG.runSuitesLocally(TestNG.java:1101)

at org.testng.TestNG.run(TestNG.java:1009)

at org.testng.remote.RemoteTestNG.run(RemoteTestNG.java:111)

at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:204)

at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:175)

Referred here and here but it did not resolve the problem.

解決方案

You use a hive2 type jdbc url.

As explained in Hive wiki, the thrift jdbc is no longer recommended:

JDBC

This document describes the JDBC client for the original Hive Server (sometimes called Thrift server or HiveServer1). For information about the HiveServer2 JDBC client, see JDBC in the HiveServer2 Clients document. HiveServer2 use is recommended; the original HiveServer has several concurrency issues and lacks several features available in HiveServer2.

Checkout this info on hive2 jdbc. Driver can be found here for instance: