Setting Timeout Periods for Daemons, Queries, and Sessions
Depending on how busy your cluster is, you might increase or decrease various timeout values. Increase timeouts if Impala is cancelling operations prematurely, when the system is responding slower than usual but the operations are still successful if given extra time. Decrease timeouts if operations are idle or hanging for long periods, and the idle or hung operations are consuming resources and reducing concurrency.
Increasing the Statestore Timeout
If you have an extensive Impala schema, for example with hundreds of databases, tens of
thousands of tables, and so on, you might encounter timeout errors during startup as the
Impala catalog service broadcasts metadata to all the Impala nodes using the statestore
service. To avoid such timeout errors on startup, increase the statestore timeout value
from its default of 10 seconds. Specify the timeout value using the
-statestore_subscriber_timeout_seconds option for the statestore
service, using the configuration instructions in
Modifying Impala Startup Options. The symptom of this problem is
messages in the
impalad log such as:
Connection with state-store lost Trying to re-register with state-store
See Scalability Considerations for the Impala Statestore for more details about statestore operation and settings on clusters with a large number of Impala-related objects such as tables and partitions.
Setting the Idle Query and Idle Session Timeouts for impalad
To keep long-running queries or idle sessions from tying up cluster resources, you can set timeout intervals for both individual queries, and entire sessions.
The timeout clock for queries and sessions only starts ticking when the query or session is idle. For queries, this means the query has results ready but is waiting for a client to fetch the data. A query can run for an arbitrary time without triggering a timeout, because the query is computing results rather than sitting idle waiting for the results to be fetched. The timeout period is intended to prevent unclosed queries from consuming resources and taking up slots in the admission count of running queries, potentially preventing other queries from starting.
For sessions, this means that no query has been submitted for some period of time.
Specify the following startup options for the impalad daemon:
--idle_query_timeoutoption specifies the time in seconds after which an idle query is cancelled. This could be a query whose results were all fetched but was never closed, or one whose results were partially fetched and then the client program stopped requesting further results. This condition is most likely to occur in a client program using the JDBC or ODBC interfaces, rather than in the interactive impala-shell interpreter. Once the query is cancelled, the client program cannot retrieve any further results.
You can reduce the idle query timeout by using the
QUERY_TIMEOUT_Squery option. Any non-zero value specified for the
--idle_query_timeoutstartup option serves as an upper limit for the
QUERY_TIMEOUT_Squery option. A zero value for
--idle_query_timeoutdisables query timeouts. See QUERY_TIMEOUT_S Query Option (Impala 2.0 or higher only) for details.
--idle_session_timeoutoption specifies the time in seconds after which an idle session is expired. A session is idle when no activity is occurring for any of the queries in that session, and the session has not started any new queries. Once a session is expired, you cannot issue any new query requests to it. The session remains open, but the only operation you can perform is to close it. The default value of 0 means that sessions never expire.
For instructions on changing impalad startup options, see Modifying Impala Startup Options.
Impala checks periodically for idle sessions and queries to cancel. The actual idle time before cancellation might be up to 50% greater than the specified configuration setting. For example, if the timeout setting was 60, the session or query might be cancelled after being idle between 60 and 90 seconds.
Setting Timeout and Retries for Thrift Connections to the Backend Client
Impala connections to the backend client are subject to failure in cases when the network is momentarily overloaded. To avoid failed queries due to transient network problems, you can configure the number of Thrift connection retries using the following option:
--backend_client_connection_num_retriesoption specifies the number of times Impala will try connecting to the backend client after the first connection attempt fails. By default, impalad will attempt three re-connections before it returns a failure.
You can configure timeouts for sending and receiving data from the backend client. Therefore, if for some reason a query hangs, instead of waiting indefinitely for a response, Impala will terminate the connection after a configurable timeout.
--backend_client_rpc_timeout_msoption can be used to specify the number of milliseconds Impala should wait for a response from the backend client before it terminates the connection and signals a failure. The default value for this property is 300000 milliseconds, or 5 minutes.
Cancelling a Query
Sometimes, an Impala query might run for an unexpectedly long time, tying up resources
in the cluster. You can cancel the query explicitly, independent of the timeout period,
by going into the web UI for the impalad host (on port 25000 by
default), and using the link on the
/queries tab to cancel the running
query. For example, press
^C in impala-shell.