Created 11-27-2016 02:30 PM
Hi,
I could not connect to Phoenix Query Server in HDP2.5 in my Java program using the thin JDBC client. Any advice?
My connection string is: jdbc:phoenix:thin:url=http://localhost:8765. I am using the thin driver: org.apache.phoenix.queryserver.client.Driver.
try { Class.forName(driver); conn = DriverManager.getConnection(connectionString); } catch(Exception e) { logger.error("Failed connecting to database.", e); }
I got the below error:
java.lang.RuntimeException: org.apache.phoenix.shaded.com.fasterxml.jackson.core.JsonParseException: Unexpected character ('o' (code 111)): Expected space separating root-level values at [Source: 8org.apache.calcite.avatica.proto.Responses$ErrorResponse� �org.apache.calcite.avatica.com.google.protobuf.InvalidProtocolBufferException: While parsing a protocol message, the input ended unexpectedly in the middle of a field. This could mean either that the input has been truncated or that an embedded message misreported its own length. at org.apache.calcite.avatica.com.google.protobuf.InvalidProtocolBufferException.truncatedMessage(InvalidProtocolBufferException.java:70) at org.apache.calcite.avatica.com.google.protobuf.CodedInputStream.skipRawBytesSlowPath(CodedInputStream.java:1293) at org.apache.calcite.avatica.com.google.protobuf.CodedInputStream.skipRawBytes(CodedInputStream.java:1276) at org.apache.calcite.avatica.com.google.protobuf.CodedInputStream.skipField(CodedInputStream.java:197) at org.apache.calcite.avatica.com.google.protobuf.CodedInputStream.skipMessage(CodedInputStream.java:273) at org.apache.calcite.avatica.com.google.protobuf.CodedInputStream.skipField(CodedInputStream.java:200) at org.apache.calcite.avatica.proto.Common$WireMessage.<init>(Common.java:11627) at org.apache.calcite.avatica.proto.Common$WireMessage.<init>(Common.java:11595) at org.apache.calcite.avatica.proto.Common$WireMessage$1.parsePartialFrom(Common.java:12061) at org.apache.calcite.avatica.proto.Common$WireMessage$1.parsePartialFrom(Common.java:12055) at org.apache.calcite.avatica.com.google.protobuf.AbstractParser.parseFrom(AbstractParser.java:89) at org.apache.calcite.avatica.com.google.protobuf.AbstractParser.parseFrom(AbstractParser.java:95) at org.apache.calcite.avatica.com.google.protobuf.AbstractParser.parseFrom(AbstractParser.java:49) at org.apache.calcite.avatica.proto.Common$WireMessage.parseFrom(Common.java:11791) at org.apache.calcite.avatica.remote.ProtobufTranslationImpl.parseRequest(ProtobufTranslationImpl.java:354) at org.apache.calcite.avatica.remote.ProtobufHandler.decode(ProtobufHandler.java:51) at org.apache.calcite.avatica.remote.ProtobufHandler.decode(ProtobufHandler.java:31) at org.apache.calcite.avatica.remote.AbstractHandler.apply(AbstractHandler.java:94) at org.apache.calcite.avatica.remote.ProtobufHandler.apply(ProtobufHandler.java:46) at org.apache.calcite.avatica.server.AvaticaProtobufHandler.handle(AvaticaProtobufHandler.java:124) at org.apache.phoenix.shaded.org.eclipse.jetty.server.handler.HandlerList.handle(HandlerList.java:52) at org.apache.phoenix.shaded.org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97) at org.apache.phoenix.shaded.org.eclipse.jetty.server.Server.handle(Server.java:499) at org.apache.phoenix.shaded.org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:311) at org.apache.phoenix.shaded.org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:257) at org.apache.phoenix.shaded.org.eclipse.jetty.io.AbstractConnection$2.run(AbstractConnection.java:544) at org.apache.phoenix.shaded.org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:635) at org.apache.phoenix.shaded.org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:555) at java.lang.Thread.run(Thread.java:745)
Created 11-28-2016 08:08 AM
can you check that both phoenix query server and phoenix client versions are same.
Created 11-28-2016 08:08 AM
can you check that both phoenix query server and phoenix client versions are same.
Created 11-28-2016 02:36 PM
Both shipped from HDP2.5, should be the same.
Created 11-28-2016 02:47 PM
can you try adding serialization=PROTOBUF in your connection string. There seems to be property "phoenix.queryserver.serialization mismatch at client and server.
jdbc:phoenix:thin:url=http://localhost:8765;serialization=PROTOBUF
Created 11-28-2016 02:49 PM
Yup! This is it. The client is trying to use JSON but the server is configured to use PROTOBUF.
If you want to use JSON (which I do not recommend), set phoenix.queryserver.serialization=JSON in hbase-site.xml and restart the Phoenix Query Server.
Created 11-29-2016 02:59 PM
Thanks, @Ankit Singhal
This solved the issue.
Created 12-01-2016 07:12 AM
it's great that it works for you..so can you accept the answer now so that it will be helpful for other users.