[ 
https://issues.apache.org/jira/browse/PHOENIX-4466?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16294521#comment-16294521
 ] 

Toshihiro Suzuki commented on PHOENIX-4466:
-------------------------------------------

I captured network packets by using tcpdump when the issue was reproduced. The 
output is as follows:
{code}
15:03:50.422898 IP (tos 0x0, ttl 64, id 30259, offset 0, flags [DF], proto TCP 
(6), length 52)
    172.26.101.78.8765 > 172.26.101.77.48206: Flags [.], cksum 0x22f7 
(incorrect -> 0x0d32), seq 3933046844, ack 1437099126, win 118, options 
[nop,nop,TS val 393018895 ecr 393022983], length 0
E..4v3@.@.....eN..eM"=.N.m.<U.dv...v"......
.l...m..
15:03:50.428837 IP (tos 0x0, ttl 64, id 30260, offset 0, flags [DF], proto TCP 
(6), length 1450)
    172.26.101.78.8765 > 172.26.101.77.48206: Flags [.], cksum 0x286d 
(incorrect -> 0xaa7d), seq 3933046844:3933048242, ack 1437099126, win 118, 
options [nop,nop,TS val 393018901 ecr 393022983], length 1398
E...v4@.@..I..eN..eM"=.N.m.<U.dv...v(m.....
.l...m..HTTP/1.1 500 Server Error
Date: Mon, 04 Dec 2017 15:03:50 GMT
Content-Type: application/octet-stream;charset=utf-8
Content-Length: 1821
Server: Jetty(9.2.z-SNAPSHOT)


8org.apache.calcite.avatica.proto.Responses$ErrorResponse..
..java.lang.IllegalArgumentException: Cannot fetch parser for Request with 
missing class name
        at 
org.apache.calcite.avatica.remote.ProtobufTranslationImpl.getParserForRequest(ProtobufTranslationImpl.java:260)
        at 
org.apache.calcite.avatica.remote.ProtobufTranslationImpl.parseRequest(ProtobufTranslationImpl.java:365)
        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:93)
        at 
org.apache.calcite.avatica.remote.ProtobufHandler.apply(ProtobufHandler.java:46)
        at 
org.apache.calcite.avatica.server.AvaticaProtobufHandler.handle(AvaticaProtobufHandler.java:127)
        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
15:03:50.428853 IP (tos 0x0, ttl 64, id 30261, offset 0, flags [DF], proto TCP 
(6), length 648)
    172.26.101.78.8765 > 172.26.101.77.48206: Flags [P.], cksum 0x254b 
(incorrect -> 0x9526), seq 3933048242:3933048838, ack 1437099126, win 118, 
options [nop,nop,TS val 393018901 ecr 393022983], length 596
E...v5@.@..j..eN..eM"=.N.m..U.dv...v%K.....
.l...m...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)
.QIllegalArgumentException: Cannot fetch parser for Request with missing class 
name .....*.000002.
.master1.openstacklocal:87658.
{code}

According to the above, it seems like the message format was not correct.

Also, one more thing I noticed is that it looks like the exception in the 
description indicates the client used JSON serialization:
{code}
        at 
org.apache.calcite.avatica.remote.JsonService.apply(JsonService.java:227)
{code}


I finally found there is Avatica jar conflict between phoenix-thin-client jar 
and spark-assembly jar.
It seems like both phoenix-thin-client jar and spark-assembly jar depend on 
calcite-avatica jar, but the version is different.
(In HDP-2.6.3, phoenix-thin-client jar depends on calcite-avatica-1.8.0.2.6.1.0 
and spark-assembly jar depends on calcite-avatica-1.2.0-incubating.)

When I ran spark-shell with -verbose:class, the following was shown:
{code}
...
[Loaded org.apache.calcite.avatica.UnregisteredDriver from 
file:/usr/hdp/2.6.3.0-235/spark/lib/spark-assembly-1.6.3.2.6.3.0-235-hadoop2.7.3.2.6.3.0-235.jar]
[Loaded org.apache.calcite.avatica.remote.Driver from 
file:/usr/hdp/2.6.3.0-235/spark/lib/spark-assembly-1.6.3.2.6.3.0-235-hadoop2.7.3.2.6.3.0-235.jar]
[Loaded org.apache.calcite.avatica.Handler from 
file:/usr/hdp/2.6.3.0-235/spark/lib/spark-assembly-1.6.3.2.6.3.0-235-hadoop2.7.3.2.6.3.0-235.jar]
...
{code}
This means the classes in calcite-avatica from spark-assembly jar 
(1.2.0-incubating) were used.

Since calcite-avatica-1.2.0-incubating doesn't support PROTOBUF serialization 
and it supports only JSON serialization, the error occurs in this case.

Therefore, we need to hide the calcite-avatica dependency in 
phoenix-thin-client jar from spark-assembly jar.

> java.lang.RuntimeException: response code 500 - Executing a spark job to 
> connect to phoenix query server and load data
> ----------------------------------------------------------------------------------------------------------------------
>
>                 Key: PHOENIX-4466
>                 URL: https://issues.apache.org/jira/browse/PHOENIX-4466
>             Project: Phoenix
>          Issue Type: Bug
>         Environment: HDP-2.6.3
>            Reporter: Toshihiro Suzuki
>            Assignee: Toshihiro Suzuki
>            Priority: Minor
>
> Steps to reproduce are as follows:
> 1. Start spark shell with 
> {code:Bash}
> spark-shell --jars /usr/hdp/current/phoenix-client/phoenix-thin-client.jar 
> {code}
> 2. Ran the following to load data 
> {code:Scala}
> scala> val query = 
> sqlContext.read.format("jdbc").option("driver","org.apache.phoenix.queryserver.client.Driver").option("url","jdbc:phoenix:thin:url=http://<phoenix
>  query server 
> hostname>:8765;serialization=PROTOBUF").option("dbtable","<table name>").load 
> {code}
> This failed with the following exception 
> {code:java}
> java.sql.SQLException: While closing connection
>       at org.apache.calcite.avatica.Helper.createException(Helper.java:39)
>       at 
> org.apache.calcite.avatica.AvaticaConnection.close(AvaticaConnection.java:156)
>       at 
> org.apache.spark.sql.execution.datasources.jdbc.JDBCRDD$.resolveTable(JDBCRDD.scala:153)
>       at 
> org.apache.spark.sql.execution.datasources.jdbc.JDBCRelation.<init>(JDBCRelation.scala:91)
>       at 
> org.apache.spark.sql.execution.datasources.jdbc.DefaultSource.createRelation(DefaultSource.scala:57)
>       at 
> org.apache.spark.sql.execution.datasources.ResolvedDataSource$.apply(ResolvedDataSource.scala:158)
>       at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:119)
>       at $iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC.<init>(<console>:25)
>       at $iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC.<init>(<console>:30)
>       at $iwC$$iwC$$iwC$$iwC$$iwC$$iwC.<init>(<console>:32)
>       at $iwC$$iwC$$iwC$$iwC$$iwC.<init>(<console>:34)
>       at $iwC$$iwC$$iwC$$iwC.<init>(<console>:36)
>       at $iwC$$iwC$$iwC.<init>(<console>:38)
>       at $iwC$$iwC.<init>(<console>:40)
>       at $iwC.<init>(<console>:42)
>       at <init>(<console>:44)
>       at .<init>(<console>:48)
>       at .<clinit>(<console>)
>       at .<init>(<console>:7)
>       at .<clinit>(<console>)
>       at $print(<console>)
>       at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>       at 
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
>       at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>       at java.lang.reflect.Method.invoke(Method.java:498)
>       at 
> org.apache.spark.repl.SparkIMain$ReadEvalPrint.call(SparkIMain.scala:1065)
>       at 
> org.apache.spark.repl.SparkIMain$Request.loadAndRun(SparkIMain.scala:1346)
>       at 
> org.apache.spark.repl.SparkIMain.loadAndRunReq$1(SparkIMain.scala:840)
>       at org.apache.spark.repl.SparkIMain.interpret(SparkIMain.scala:871)
>       at org.apache.spark.repl.SparkIMain.interpret(SparkIMain.scala:819)
>       at 
> org.apache.spark.repl.SparkILoop.reallyInterpret$1(SparkILoop.scala:857)
>       at 
> org.apache.spark.repl.SparkILoop.interpretStartingWith(SparkILoop.scala:902)
>       at org.apache.spark.repl.SparkILoop.command(SparkILoop.scala:814)
>       at org.apache.spark.repl.SparkILoop.processLine$1(SparkILoop.scala:657)
>       at org.apache.spark.repl.SparkILoop.innerLoop$1(SparkILoop.scala:665)
>       at 
> org.apache.spark.repl.SparkILoop.org$apache$spark$repl$SparkILoop$$loop(SparkILoop.scala:670)
>       at 
> org.apache.spark.repl.SparkILoop$$anonfun$org$apache$spark$repl$SparkILoop$$process$1.apply$mcZ$sp(SparkILoop.scala:997)
>       at 
> org.apache.spark.repl.SparkILoop$$anonfun$org$apache$spark$repl$SparkILoop$$process$1.apply(SparkILoop.scala:945)
>       at 
> org.apache.spark.repl.SparkILoop$$anonfun$org$apache$spark$repl$SparkILoop$$process$1.apply(SparkILoop.scala:945)
>       at 
> scala.tools.nsc.util.ScalaClassLoader$.savingContextLoader(ScalaClassLoader.scala:135)
>       at 
> org.apache.spark.repl.SparkILoop.org$apache$spark$repl$SparkILoop$$process(SparkILoop.scala:945)
>       at org.apache.spark.repl.SparkILoop.process(SparkILoop.scala:1059)
>       at org.apache.spark.repl.Main$.main(Main.scala:31)
>       at org.apache.spark.repl.Main.main(Main.scala)
>       at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>       at 
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
>       at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>       at java.lang.reflect.Method.invoke(Method.java:498)
>       at 
> org.apache.spark.deploy.SparkSubmit$.org$apache$spark$deploy$SparkSubmit$$runMain(SparkSubmit.scala:750)
>       at 
> org.apache.spark.deploy.SparkSubmit$.doRunMain$1(SparkSubmit.scala:181)
>       at org.apache.spark.deploy.SparkSubmit$.submit(SparkSubmit.scala:206)
>       at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:121)
>       at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)
> Caused by: java.lang.RuntimeException: response code 500
>       at 
> org.apache.calcite.avatica.remote.RemoteService.apply(RemoteService.java:45)
>       at 
> org.apache.calcite.avatica.remote.JsonService.apply(JsonService.java:227)
>       at 
> org.apache.calcite.avatica.remote.RemoteMeta.closeConnection(RemoteMeta.java:78)
>       at 
> org.apache.calcite.avatica.AvaticaConnection.close(AvaticaConnection.java:153)
>       ... 51 more
> {code}



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

Reply via email to