Uploaded image for project: 'Hive'
  1. Hive
  2. HIVE-6050

Newer versions of JDBC driver does not work with older HiveServer2

    Details

    • Type: Bug
    • Status: Open
    • Priority: Blocker
    • Resolution: Unresolved
    • Affects Version/s: 0.13.0
    • Fix Version/s: None
    • Component/s: HiveServer2, JDBC
    • Labels:
      None

      Description

      HiveServer2 instance has to be upgraded before the JDBC drivers used by applications are upgraded. If jdbc drivers are updated before HiveServer2 is upgraded it will not be functional.

      Connect from JDBC driver of Hive 0.13 (TProtocolVersion=v4) to HiveServer2 of Hive 0.10 (TProtocolVersion=v1), will return the following exception:

      java.sql.SQLException: Could not establish connection to jdbc:hive2://localhost:10000/default: Required field 'client_protocol' is unset! Struct:TOpenSessionReq(client_protocol:null)
      	at org.apache.hive.jdbc.HiveConnection.openSession(HiveConnection.java:336)
      	at org.apache.hive.jdbc.HiveConnection.<init>(HiveConnection.java:158)
      	at org.apache.hive.jdbc.HiveDriver.connect(HiveDriver.java:105)
      	at java.sql.DriverManager.getConnection(DriverManager.java:571)
      	at java.sql.DriverManager.getConnection(DriverManager.java:187)
      	at org.apache.hive.jdbc.MyTestJdbcDriver2.getConnection(MyTestJdbcDriver2.java:73)
      	at org.apache.hive.jdbc.MyTestJdbcDriver2.&lt;init&gt;(MyTestJdbcDriver2.java:49)
      	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
      	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
      	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
      	at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
      	at org.junit.runners.BlockJUnit4ClassRunner.createTest(BlockJUnit4ClassRunner.java:187)
      	at org.junit.runners.BlockJUnit4ClassRunner$1.runReflectiveCall(BlockJUnit4ClassRunner.java:236)
      	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
      	at org.junit.runners.BlockJUnit4ClassRunner.methodBlock(BlockJUnit4ClassRunner.java:233)
      	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:68)
      	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47)
      	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231)
      	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60)
      	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229)
      	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50)
      	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222)
      	at org.junit.runners.ParentRunner.run(ParentRunner.java:300)
      	at junit.framework.JUnit4TestAdapter.run(JUnit4TestAdapter.java:39)
      	at org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.run(JUnitTestRunner.java:523)
      	at org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.launch(JUnitTestRunner.java:1063)
      	at org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.main(JUnitTestRunner.java:914)
      Caused by: org.apache.thrift.TApplicationException: Required field 'client_protocol' is unset! Struct:TOpenSessionReq(client_protocol:null)
      	at org.apache.thrift.TApplicationException.read(TApplicationException.java:108)
      	at org.apache.thrift.TServiceClient.receiveBase(TServiceClient.java:71)
      	at org.apache.hive.service.cli.thrift.TCLIService$Client.recv_OpenSession(TCLIService.java:160)
      	at org.apache.hive.service.cli.thrift.TCLIService$Client.OpenSession(TCLIService.java:147)
      	at org.apache.hive.jdbc.HiveConnection.openSession(HiveConnection.java:327)
      	... 37 more
      

      On code analysis, it looks like the 'client_protocol' scheme is a ThriftEnum, which doesn't seem to be backward-compatible. Look at the code path in the generated file 'TOpenSessionReq.java', method TOpenSessionReqStandardScheme.read():

      1. The method will call 'TProtocolVersion.findValue()' on the thrift protocol's byte stream, which returns null if the client is sending an enum value unknown to the server. (v4 is unknown to server)
      2. The method will then call struct.validate(), which will throw the above exception because of null version.

      So doesn't look like the current backward-compatibility scheme will work.

        Issue Links

          Activity

          Hide
          fpin Furcy Pin added a comment -

          Hi,

          I ran into the same problem, and found a workaround for my setup, so I wanted to share it.

          I have an application that uses hive-cli 1.2.0 (because of Spark) and that sends queries to our cluster via hive-jdbc.
          Our cluster is still stuck in 1.1.0 (thank you Cloudera) and I ran into this issue when talking with the v1.2.0 jdbc client to the v1.1.0 jdbc server.

          I managed to make everything work with the following dependency setup (sbt syntax):

          libraryDependencies += "org.apache.hive" % "hive-service" % "1.1.0"
          
          libraryDependencies += "org.apache.hive" % "hive-jdbc" % "1.1.0"
          
          libraryDependencies += "org.apache.hive" % "hive-cli" % "1.2.0" exclude("org.apache.hive", "hive-service")
          

          The trick was that the client_protocol is not defined in hive-jdbc but in hive-service, so you must make sure that your client has the same version of hive-service than your server.

          I didn't run into any other compatibility problem so far, but I don't guarantee that nothing will break when mixing two hive versions together...

          Show
          fpin Furcy Pin added a comment - Hi, I ran into the same problem, and found a workaround for my setup, so I wanted to share it. I have an application that uses hive-cli 1.2.0 (because of Spark) and that sends queries to our cluster via hive-jdbc. Our cluster is still stuck in 1.1.0 (thank you Cloudera) and I ran into this issue when talking with the v1.2.0 jdbc client to the v1.1.0 jdbc server. I managed to make everything work with the following dependency setup (sbt syntax): libraryDependencies += "org.apache.hive" % "hive-service" % "1.1.0" libraryDependencies += "org.apache.hive" % "hive-jdbc" % "1.1.0" libraryDependencies += "org.apache.hive" % "hive-cli" % "1.2.0" exclude( "org.apache.hive" , "hive-service" ) The trick was that the client_protocol is not defined in hive-jdbc but in hive-service , so you must make sure that your client has the same version of hive-service than your server. I didn't run into any other compatibility problem so far, but I don't guarantee that nothing will break when mixing two hive versions together...
          Hide
          sanjiv singh sanjiv singh added a comment -

          Any update on this ..we are facing same issue with 1.2.1.

          Show
          sanjiv singh sanjiv singh added a comment - Any update on this ..we are facing same issue with 1.2.1.
          Hide
          mikeskali michael sklyar added a comment -

          I had this error: H060 Unable to open Hive session: org.apache.thrift.protocol.TProtocolException: Required field 'serverProtocolVersion' is unset!

          Did the trick for me:
          hadoop.proxyuser.hive.hosts=*
          hadoop.proxyuser.hive.groups=*

          If you have ambari you can add the properties via: services->HDFS->configs->advanced->custom core-site
          Than restart all the affected the services.

          Not sure how is it related to protocol version - at least the error message is definitely wrong.

          Show
          mikeskali michael sklyar added a comment - I had this error: H060 Unable to open Hive session: org.apache.thrift.protocol.TProtocolException: Required field 'serverProtocolVersion' is unset! Did the trick for me: hadoop.proxyuser.hive.hosts=* hadoop.proxyuser.hive.groups=* If you have ambari you can add the properties via: services->HDFS->configs->advanced->custom core-site Than restart all the affected the services. Not sure how is it related to protocol version - at least the error message is definitely wrong.
          Hide
          metrollsta metrollsta added a comment -

          When will this be fixed? Or is there a workaround?

          Show
          metrollsta metrollsta added a comment - When will this be fixed? Or is there a workaround?
          Hide
          fedorz Zoltan Fedor added a comment -

          +1

          Show
          fedorz Zoltan Fedor added a comment - +1
          Hide
          qiaohaijun qiaohaijun added a comment -

          14/11/01 19:12:44 ERROR jdbc.HiveConnection: Error opening session
          org.apache.thrift.TApplicationException: Required field 'client_protocol' is unset! Struct:TOpenSessionReq(client_protocol:null)
          at org.apache.thrift.TApplicationException.read(TApplicationException.java:108)
          at org.apache.thrift.TServiceClient.receiveBase(TServiceClient.java:71)
          at org.apache.hive.service.cli.thrift.TCLIService$Client.recv_OpenSession(TCLIService.java:156)
          at org.apache.hive.service.cli.thrift.TCLIService$Client.OpenSession(TCLIService.java:143)
          at org.apache.hive.jdbc.HiveConnection.openSession(HiveConnection.java:415)
          at org.apache.hive.jdbc.HiveConnection.<init>(HiveConnection.java:193)
          at org.apache.hive.jdbc.HiveDriver.connect(HiveDriver.java:105)
          at java.sql.DriverManager.getConnection(DriverManager.java:571)
          at java.sql.DriverManager.getConnection(DriverManager.java:187)
          at org.apache.hive.beeline.DatabaseConnection.connect(DatabaseConnection.java:145)
          at org.apache.hive.beeline.DatabaseConnection.getConnection(DatabaseConnection.java:186)
          at org.apache.hive.beeline.Commands.connect(Commands.java:959)
          at org.apache.hive.beeline.Commands.connect(Commands.java:880)
          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.hive.beeline.ReflectiveCommandHandler.execute(ReflectiveCommandHandler.java:44)
          at org.apache.hive.beeline.BeeLine.dispatch(BeeLine.java:801)
          at org.apache.hive.beeline.BeeLine.begin(BeeLine.java:659)
          at org.apache.hive.beeline.BeeLine.mainWithInputRedirection(BeeLine.java:368)
          at org.apache.hive.beeline.BeeLine.main(BeeLine.java:351)
          Error: Invalid URL: jdbc:hive2://10.134.34.181:10000 (state=08S01,code=0)


          spark 1.1.1
          hive 0.12-probuf-2.5

          Show
          qiaohaijun qiaohaijun added a comment - 14/11/01 19:12:44 ERROR jdbc.HiveConnection: Error opening session org.apache.thrift.TApplicationException: Required field 'client_protocol' is unset! Struct:TOpenSessionReq(client_protocol:null) at org.apache.thrift.TApplicationException.read(TApplicationException.java:108) at org.apache.thrift.TServiceClient.receiveBase(TServiceClient.java:71) at org.apache.hive.service.cli.thrift.TCLIService$Client.recv_OpenSession(TCLIService.java:156) at org.apache.hive.service.cli.thrift.TCLIService$Client.OpenSession(TCLIService.java:143) at org.apache.hive.jdbc.HiveConnection.openSession(HiveConnection.java:415) at org.apache.hive.jdbc.HiveConnection.<init>(HiveConnection.java:193) at org.apache.hive.jdbc.HiveDriver.connect(HiveDriver.java:105) at java.sql.DriverManager.getConnection(DriverManager.java:571) at java.sql.DriverManager.getConnection(DriverManager.java:187) at org.apache.hive.beeline.DatabaseConnection.connect(DatabaseConnection.java:145) at org.apache.hive.beeline.DatabaseConnection.getConnection(DatabaseConnection.java:186) at org.apache.hive.beeline.Commands.connect(Commands.java:959) at org.apache.hive.beeline.Commands.connect(Commands.java:880) 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.hive.beeline.ReflectiveCommandHandler.execute(ReflectiveCommandHandler.java:44) at org.apache.hive.beeline.BeeLine.dispatch(BeeLine.java:801) at org.apache.hive.beeline.BeeLine.begin(BeeLine.java:659) at org.apache.hive.beeline.BeeLine.mainWithInputRedirection(BeeLine.java:368) at org.apache.hive.beeline.BeeLine.main(BeeLine.java:351) Error: Invalid URL: jdbc:hive2://10.134.34.181:10000 (state=08S01,code=0) — spark 1.1.1 hive 0.12-probuf-2.5
          Hide
          qiaohaijun qiaohaijun added a comment -

          +1

          Show
          qiaohaijun qiaohaijun added a comment - +1
          Hide
          brocknoland Brock Noland added a comment -

          AFAIK there is no present work around. The server must be higher or equal to the client.

          Show
          brocknoland Brock Noland added a comment - AFAIK there is no present work around. The server must be higher or equal to the client.
          Hide
          kenahoo Ken Williams added a comment -

          I'm also looking for a workaround to this - I'm seeing the error when trying to connect to a 0.13 Hive.

          Show
          kenahoo Ken Williams added a comment - I'm also looking for a workaround to this - I'm seeing the error when trying to connect to a 0.13 Hive.
          Hide
          DeaconDesperado Mark Grey added a comment -

          Is there a workaround for overcoming the Thrift problem when connecting newer clients to an older hiveserver2? I'd like to hook up Hue into an existing hiveserver in production.

          Show
          DeaconDesperado Mark Grey added a comment - Is there a workaround for overcoming the Thrift problem when connecting newer clients to an older hiveserver2? I'd like to hook up Hue into an existing hiveserver in production.
          Hide
          thejas Thejas M Nair added a comment -

          I verified that hive 0.11 and hive 0.12 jdbc driver works with hive 0.13 hiveserver2. There is still an issue with hive 0.13 jdbc driver not working with old hive server2 versions.
          As old jdbc drivers are now working with the new hiveserver2 in 0.13, I don't think this needs to block hive 0.13 release.

          Show
          thejas Thejas M Nair added a comment - I verified that hive 0.11 and hive 0.12 jdbc driver works with hive 0.13 hiveserver2. There is still an issue with hive 0.13 jdbc driver not working with old hive server2 versions. As old jdbc drivers are now working with the new hiveserver2 in 0.13, I don't think this needs to block hive 0.13 release.
          Hide
          thejas Thejas M Nair added a comment -

          Do you guys have any thoughts on which would be a more common scenario to support: new jdbc driver compatible with old server version or old jdbc driver compatible with a newer server version?

          I think it is very important that one version of jdbc driver be able to talk to different versions of HS2. If the older version of driver is able to talk to newer versions of HS2, that would be the ideal case.

          Show
          thejas Thejas M Nair added a comment - Do you guys have any thoughts on which would be a more common scenario to support: new jdbc driver compatible with old server version or old jdbc driver compatible with a newer server version? I think it is very important that one version of jdbc driver be able to talk to different versions of HS2. If the older version of driver is able to talk to newer versions of HS2, that would be the ideal case.
          Hide
          cwsteinbach Carl Steinbach added a comment -

          It looks like Thrift IDL is not backward compatible wrt to Enums. We use Enums in other places in the IDL (e.g. TTypeId, TStatusCode, TOperationState, TOperationType, TGetTypeInfo, TFetchOrientation), and should probably investigate whether these references need to updated as well. I'm convinced that using an Enum for TGetTypeInfo was a bad idea, and suspect that the same may also be true for TTypeId.

          Show
          cwsteinbach Carl Steinbach added a comment - It looks like Thrift IDL is not backward compatible wrt to Enums. We use Enums in other places in the IDL (e.g. TTypeId, TStatusCode, TOperationState, TOperationType, TGetTypeInfo, TFetchOrientation), and should probably investigate whether these references need to updated as well. I'm convinced that using an Enum for TGetTypeInfo was a bad idea, and suspect that the same may also be true for TTypeId.
          Hide
          cwsteinbach Carl Steinbach added a comment -

          I think running an older JDBC driver against a newer server version is going to be the more common scenario since there will always be cases of clients that are slow to upgrade.

          Show
          cwsteinbach Carl Steinbach added a comment - I think running an older JDBC driver against a newer server version is going to be the more common scenario since there will always be cases of clients that are slow to upgrade.
          Hide
          vgumashta Vaibhav Gumashta added a comment -

          Carl Steinbach Thejas M Nair Brock Noland Navis
          Do you guys have any thoughts on which would be a more common scenario to support: new jdbc driver compatible with old server version or old jdbc driver compatible with a newer server version?

          Show
          vgumashta Vaibhav Gumashta added a comment - Carl Steinbach Thejas M Nair Brock Noland Navis Do you guys have any thoughts on which would be a more common scenario to support: new jdbc driver compatible with old server version or old jdbc driver compatible with a newer server version?
          Hide
          brocknoland Brock Noland added a comment -

          I think this should be a blocker. Changed to blocker status.

          Show
          brocknoland Brock Noland added a comment - I think this should be a blocker. Changed to blocker status.
          Hide
          navis Navis added a comment -

          I've confronted same issue in HIVE-3746. I think the later case (0.12.0 client -> trunk server) is fixed in attached patch. But the former seemed hard to fix (changing protocol version 'required' to 'optional' breaks wire protocol)

          Show
          navis Navis added a comment - I've confronted same issue in HIVE-3746 . I think the later case (0.12.0 client -> trunk server) is fixed in attached patch. But the former seemed hard to fix (changing protocol version 'required' to 'optional' breaks wire protocol)
          Hide
          szehon Szehon Ho added a comment -

          As another note, the issue also exists for the other way (connecting Hive 0.10 driver with Hive 0.13 server).

          Exception is almost same, except this time client complains about the serverProtocolVersion.

          "Could not establish connection to jdbc:hive2://localhost:10000: Required field &apos;serverProtocolVersion&apos; is unset! Struct:TOpenSessionResp(status:TStatus(statusCode:SUCCESS_STATUS), serverProtocolVersion:null, sessionHandle:TSessionHandle(sessionId:THandleIdentifier(guid:29 3C D5 F4 B0 DB 49 48 86 0D 16 2B 42 D5 76 49, secret:B5 33 C6 D3 4B CF 4E 58 AE 0B DD DC 7F 71 AD AD)), configuration:{})" type="java.sql.SQLException">java.sql.SQLException: Could not establish connection to jdbc:hive2://localhost:10000: Required field &apos;serverProtocolVersion&apos; is unset! Struct:TOpenSessionResp(status:TStatus(statusCode:SUCCESS_STATUS), serverProtocolVersion:null, sessionHandle:TSessionHandle(sessionId:THandleIdentifier(guid:29 3C D5 F4 B0 DB 49 48 86 0D 16 2B 42 D5 76 49, secret:B5 33 C6 D3 4B CF 4E 58 AE 0B DD DC 7F 71 AD AD)), configuration:{})
          	at org.apache.hive.jdbc.HiveConnection.openSession(HiveConnection.java:262)
          	at org.apache.hive.jdbc.HiveConnection.&lt;init&gt;(HiveConnection.java:133)
          	at org.apache.hive.jdbc.HiveDriver.connect(HiveDriver.java:106)
          	at java.sql.DriverManager.getConnection(DriverManager.java:582)
          	at java.sql.DriverManager.getConnection(DriverManager.java:185)
          	at org.apache.hive.jdbc.MyTestJdbcDriver2.getConnection(MyTestJdbcDriver2.java:73)
          	at org.apache.hive.jdbc.MyTestJdbcDriver2.&lt;init&gt;(MyTestJdbcDriver2.java:49)
          	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
          	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
          	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
          	at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
          	at org.junit.runners.BlockJUnit4ClassRunner.createTest(BlockJUnit4ClassRunner.java:187)
          	at org.junit.runners.BlockJUnit4ClassRunner$1.runReflectiveCall(BlockJUnit4ClassRunner.java:236)
          	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
          	at org.junit.runners.BlockJUnit4ClassRunner.methodBlock(BlockJUnit4ClassRunner.java:233)
          	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:68)
          	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47)
          	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231)
          	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60)
          	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229)
          	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50)
          	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222)
          	at org.junit.runners.ParentRunner.run(ParentRunner.java:300)
          	at junit.framework.JUnit4TestAdapter.run(JUnit4TestAdapter.java:39)
          	at org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.run(JUnitTestRunner.java:523)
          	at org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.launch(JUnitTestRunner.java:1063)
          	at org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.main(JUnitTestRunner.java:914)
          Caused by: org.apache.thrift.protocol.TProtocolException: Required field &apos;serverProtocolVersion&apos; is unset! Struct:TOpenSessionResp(status:TStatus(statusCode:SUCCESS_STATUS), serverProtocolVersion:null, sessionHandle:TSessionHandle(sessionId:THandleIdentifier(guid:29 3C D5 F4 B0 DB 49 48 86 0D 16 2B 42 D5 76 49, secret:B5 33 C6 D3 4B CF 4E 58 AE 0B DD DC 7F 71 AD AD)), configuration:{})
          	at org.apache.hive.service.cli.thrift.TOpenSessionResp.validate(TOpenSessionResp.java:578)
          	at org.apache.hive.service.cli.thrift.TOpenSessionResp$TOpenSessionRespStandardScheme.read(TOpenSessionResp.java:676)
          	at org.apache.hive.service.cli.thrift.TOpenSessionResp$TOpenSessionRespStandardScheme.read(TOpenSessionResp.java:612)
          	at org.apache.hive.service.cli.thrift.TOpenSessionResp.read(TOpenSessionResp.java:520)
          	at org.apache.hive.service.cli.thrift.TCLIService$OpenSession_result$OpenSession_resultStandardScheme.read(TCLIService.java:2361)
          	at org.apache.hive.service.cli.thrift.TCLIService$OpenSession_result$OpenSession_resultStandardScheme.read(TCLIService.java:2346)
          	at org.apache.hive.service.cli.thrift.TCLIService$OpenSession_result.read(TCLIService.java:2293)
          	at org.apache.thrift.TServiceClient.receiveBase(TServiceClient.java:78)
          	at org.apache.hive.service.cli.thrift.TCLIService$Client.recv_OpenSession(TCLIService.java:160)
          	at org.apache.hive.service.cli.thrift.TCLIService$Client.OpenSession(TCLIService.java:147)
          	at org.apache.hive.jdbc.HiveConnection.openSession(HiveConnection.java:254)
          	... 26 more
          
          Show
          szehon Szehon Ho added a comment - As another note, the issue also exists for the other way (connecting Hive 0.10 driver with Hive 0.13 server). Exception is almost same, except this time client complains about the serverProtocolVersion. "Could not establish connection to jdbc:hive2://localhost:10000: Required field &apos;serverProtocolVersion&apos; is unset! Struct:TOpenSessionResp(status:TStatus(statusCode:SUCCESS_STATUS), serverProtocolVersion:null, sessionHandle:TSessionHandle(sessionId:THandleIdentifier(guid:29 3C D5 F4 B0 DB 49 48 86 0D 16 2B 42 D5 76 49, secret:B5 33 C6 D3 4B CF 4E 58 AE 0B DD DC 7F 71 AD AD)), configuration:{})" type="java.sql.SQLException">java.sql.SQLException: Could not establish connection to jdbc:hive2://localhost:10000: Required field &apos;serverProtocolVersion&apos; is unset! Struct:TOpenSessionResp(status:TStatus(statusCode:SUCCESS_STATUS), serverProtocolVersion:null, sessionHandle:TSessionHandle(sessionId:THandleIdentifier(guid:29 3C D5 F4 B0 DB 49 48 86 0D 16 2B 42 D5 76 49, secret:B5 33 C6 D3 4B CF 4E 58 AE 0B DD DC 7F 71 AD AD)), configuration:{}) at org.apache.hive.jdbc.HiveConnection.openSession(HiveConnection.java:262) at org.apache.hive.jdbc.HiveConnection.&lt;init&gt;(HiveConnection.java:133) at org.apache.hive.jdbc.HiveDriver.connect(HiveDriver.java:106) at java.sql.DriverManager.getConnection(DriverManager.java:582) at java.sql.DriverManager.getConnection(DriverManager.java:185) at org.apache.hive.jdbc.MyTestJdbcDriver2.getConnection(MyTestJdbcDriver2.java:73) at org.apache.hive.jdbc.MyTestJdbcDriver2.&lt;init&gt;(MyTestJdbcDriver2.java:49) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) at java.lang.reflect.Constructor.newInstance(Constructor.java:513) at org.junit.runners.BlockJUnit4ClassRunner.createTest(BlockJUnit4ClassRunner.java:187) at org.junit.runners.BlockJUnit4ClassRunner$1.runReflectiveCall(BlockJUnit4ClassRunner.java:236) at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15) at org.junit.runners.BlockJUnit4ClassRunner.methodBlock(BlockJUnit4ClassRunner.java:233) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:68) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47) at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231) at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60) at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229) at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50) at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222) at org.junit.runners.ParentRunner.run(ParentRunner.java:300) at junit.framework.JUnit4TestAdapter.run(JUnit4TestAdapter.java:39) at org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.run(JUnitTestRunner.java:523) at org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.launch(JUnitTestRunner.java:1063) at org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.main(JUnitTestRunner.java:914) Caused by: org.apache.thrift.protocol.TProtocolException: Required field &apos;serverProtocolVersion&apos; is unset! Struct:TOpenSessionResp(status:TStatus(statusCode:SUCCESS_STATUS), serverProtocolVersion:null, sessionHandle:TSessionHandle(sessionId:THandleIdentifier(guid:29 3C D5 F4 B0 DB 49 48 86 0D 16 2B 42 D5 76 49, secret:B5 33 C6 D3 4B CF 4E 58 AE 0B DD DC 7F 71 AD AD)), configuration:{}) at org.apache.hive.service.cli.thrift.TOpenSessionResp.validate(TOpenSessionResp.java:578) at org.apache.hive.service.cli.thrift.TOpenSessionResp$TOpenSessionRespStandardScheme.read(TOpenSessionResp.java:676) at org.apache.hive.service.cli.thrift.TOpenSessionResp$TOpenSessionRespStandardScheme.read(TOpenSessionResp.java:612) at org.apache.hive.service.cli.thrift.TOpenSessionResp.read(TOpenSessionResp.java:520) at org.apache.hive.service.cli.thrift.TCLIService$OpenSession_result$OpenSession_resultStandardScheme.read(TCLIService.java:2361) at org.apache.hive.service.cli.thrift.TCLIService$OpenSession_result$OpenSession_resultStandardScheme.read(TCLIService.java:2346) at org.apache.hive.service.cli.thrift.TCLIService$OpenSession_result.read(TCLIService.java:2293) at org.apache.thrift.TServiceClient.receiveBase(TServiceClient.java:78) at org.apache.hive.service.cli.thrift.TCLIService$Client.recv_OpenSession(TCLIService.java:160) at org.apache.hive.service.cli.thrift.TCLIService$Client.OpenSession(TCLIService.java:147) at org.apache.hive.jdbc.HiveConnection.openSession(HiveConnection.java:254) ... 26 more
          Hide
          szehon Szehon Ho added a comment -

          Ashutosh Chauhan Carl Steinbach Do you guys have any thoughts/experiences on this issue?

          It seems like we would need to change client protocol version to use another data type, to get this to work. My thought was this should be ok, as backward-compatibility seem to be broken today anyway based on this analysis.

          Show
          szehon Szehon Ho added a comment - Ashutosh Chauhan Carl Steinbach Do you guys have any thoughts/experiences on this issue? It seems like we would need to change client protocol version to use another data type, to get this to work. My thought was this should be ok, as backward-compatibility seem to be broken today anyway based on this analysis.

            People

            • Assignee:
              Unassigned
              Reporter:
              szehon Szehon Ho
            • Votes:
              14 Vote for this issue
              Watchers:
              39 Start watching this issue

              Dates

              • Created:
                Updated:

                Development