hive-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Xuefu Zhang (JIRA)" <>
Subject [jira] [Commented] (HIVE-16071) Spark remote driver misuses the timeout in RPC handshake
Date Wed, 08 Mar 2017 04:58:37 GMT


Xuefu Zhang commented on HIVE-16071:

Hi [~lirui], thank for your input and experiment. I think we are making some progress in drawing
a conclusion.
If no SaslMessage is sent, Hive will still wait for hive.spark.client.server.connect.timeout,
even if cancelTask closes the channel after 1s.
I'm particularly concern on cases where Hive takes more than it needs to detect a problem
and return the error to the user. In this case, Hive should know in 1s that Sasl handshake
doesn't complete. It doesn't make sense to let user know the failure until after 1 hr. (1
hr is set to accommodate the resource availability, not connection establishment.)

the cancelTask only closes the channel, it doesn't set failure to the Future.
This is a good observation. Is this another bug that we should fix? That is, let cancelTask
fail the Future so that Hive stops waiting until server.connect.timeout elapses.

Any further thoughts?

[], To answer your question, I don't think we need another property. We should use
client.connect.timeout as it's also used on driver side. If the default value is too low,
we can bump it up.

> Spark remote driver misuses the timeout in RPC handshake
> --------------------------------------------------------
>                 Key: HIVE-16071
>                 URL:
>             Project: Hive
>          Issue Type: Bug
>          Components: Spark
>            Reporter: Chaoyu Tang
>            Assignee: Chaoyu Tang
>         Attachments: HIVE-16071.patch
> Based on its property description in HiveConf and the comments in HIVE-12650 (,
hive.spark.client.connect.timeout is the timeout when the spark remote driver makes a socket
connection (channel) to RPC server. But currently it is also used by the remote driver for
RPC client/server handshaking, which is not right. Instead, hive.spark.client.server.connect.timeout
should be used and it has already been used by the RPCServer in the handshaking.
> The error like following is usually caused by this issue, since the default hive.spark.client.connect.timeout
value (1000ms) used by remote driver for handshaking is a little too short.
> {code}
> 17/02/20 08:46:08 ERROR yarn.ApplicationMaster: User class threw exception: java.util.concurrent.ExecutionException: Client closed before SASL negotiation finished.
> java.util.concurrent.ExecutionException: Client closed
before SASL negotiation finished.
>         at io.netty.util.concurrent.AbstractFuture.get(
>         at org.apache.hive.spark.client.RemoteDriver.<init>(
>         at org.apache.hive.spark.client.RemoteDriver.main(
>         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>         at sun.reflect.NativeMethodAccessorImpl.invoke(
>         at sun.reflect.DelegatingMethodAccessorImpl.invoke(
>         at java.lang.reflect.Method.invoke(
>         at org.apache.spark.deploy.yarn.ApplicationMaster$$anon$
> Caused by: Client closed before SASL negotiation finished.
>         at org.apache.hive.spark.client.rpc.Rpc$SaslClientHandler.dispose(
>         at org.apache.hive.spark.client.rpc.SaslHandler.channelInactive(
> {code}

This message was sent by Atlassian JIRA

View raw message