Components of the Impala Server
The Impala server is a distributed, massively parallel processing (MPP) database engine. It consists of different daemon processes that run on specific hosts within your cluster.
The Impala Daemon
The core Impala component is a daemon process that runs on each DataNode of the cluster, physically represented
by the impalad
process. It reads and writes to data files; accepts queries transmitted
from the impala-shell
command, Hue, JDBC, or ODBC; parallelizes the queries and
distributes work across the cluster; and transmits intermediate query results back to the
central coordinator node.
You can submit a query to the Impala daemon running on any DataNode, and that instance of the daemon serves as the
coordinator node for that query. The other nodes transmit partial results back to the
coordinator, which constructs the final result set for a query. When running experiments with functionality
through the impala-shell
command, you might always connect to the same Impala daemon for
convenience. For clusters running production workloads, you might load-balance by
submitting each query to a different Impala daemon in round-robin style, using the JDBC or ODBC interfaces.
The Impala daemons are in constant communication with the statestore, to confirm which nodes are healthy and can accept new work.
They also receive broadcast messages from the catalogd daemon (introduced in Impala 1.2)
whenever any Impala node in the cluster creates, alters, or drops any type of object, or when an
INSERT
or LOAD DATA
statement is processed through Impala. This
background communication minimizes the need for REFRESH
or INVALIDATE
METADATA
statements that were needed to coordinate metadata across nodes prior to Impala 1.2.
In Impala 2.9 and higher, you can control which hosts act as query coordinators and which act as query executors, to improve scalability for highly concurrent workloads on large clusters. See Scalability Considerations for Impala for details.
Related information: Modifying Impala Startup Options, Starting Impala, Setting the Idle Query and Idle Session Timeouts for impalad, Ports Used by Impala, Using Impala through a Proxy for High Availability
The Impala Statestore
The Impala component known as the statestore checks on the health of Impala daemons on all the
DataNodes in a cluster, and continuously relays its findings to each of those daemons. It is physically
represented by a daemon process named statestored
; you only need such a process on one
host in the cluster. If an Impala daemon goes offline due to hardware failure, network error, software issue,
or other reason, the statestore informs all the other Impala daemons so that future queries can avoid making
requests to the unreachable node.
Because the statestore's purpose is to help when things go wrong, it is not critical to the normal operation of an Impala cluster. If the statestore is not running or becomes unreachable, the Impala daemons continue running and distributing work among themselves as usual; the cluster just becomes less robust if other Impala daemons fail while the statestore is offline. When the statestore comes back online, it re-establishes communication with the Impala daemons and resumes its monitoring function.
Most considerations for load balancing and high availability apply to the impalad daemon. The statestored and catalogd daemons do not have special requirements for high availability, because problems with those daemons do not result in data loss. If those daemons become unavailable due to an outage on a particular host, you can stop the Impala service, delete the Impala StateStore and Impala Catalog Server roles, add the roles on a different host, and restart the Impala service.
Related information:
Scalability Considerations for the Impala Statestore, Modifying Impala Startup Options, Starting Impala, Increasing the Statestore Timeout, Ports Used by Impala
The Impala Catalog Service
The Impala component known as the catalog service relays the metadata changes from Impala SQL
statements to all the Impala daemons in a cluster. It is physically represented by a daemon process named
catalogd
; you only need such a process on one host in the cluster. Because the requests
are passed through the statestore daemon, it makes sense to run the statestored and
catalogd services on the same host.
The catalog service avoids the need to issue
REFRESH
and INVALIDATE METADATA
statements when the metadata changes are
performed by statements issued through Impala. When you create a table, load data, and so on through Hive,
you do need to issue REFRESH
or INVALIDATE METADATA
on an Impala node
before executing a query there.
This feature touches a number of aspects of Impala:
-
See Installing Impala, Upgrading Impala and Starting Impala, for usage information for the catalogd daemon.
-
The
REFRESH
andINVALIDATE METADATA
statements are not needed when theCREATE TABLE
,INSERT
, or other table-changing or data-changing operation is performed through Impala. These statements are still needed if such operations are done through Hive or by manipulating data files directly in HDFS, but in those cases the statements only need to be issued on one Impala node rather than on all nodes. See REFRESH Statement and INVALIDATE METADATA Statement for the latest usage information for those statements.
--load_catalog_in_background
option to control when
the metadata of a table is loaded.
-
If set to
false
, the metadata of a table is loaded when it is referenced for the first time. This means that the first run of a particular query can be slower than subsequent runs. Starting in Impala 2.2, the default forload_catalog_in_background
isfalse
. -
If set to
true
, the catalog service attempts to load metadata for a table even if no query needed that metadata. So metadata will possibly be already loaded when the first query that would need it is run. However, for the following reasons, we recommend not to set the option totrue
.- Background load can interfere with query-specific metadata loading. This can happen on startup or after invalidating metadata, with a duration depending on the amount of metadata, and can lead to a seemingly random long running queries that are difficult to diagnose.
- Impala may load metadata for tables that are possibly never used, potentially increasing catalog size and consequently memory usage for both catalog service and Impala Daemon.
Most considerations for load balancing and high availability apply to the impalad daemon. The statestored and catalogd daemons do not have special requirements for high availability, because problems with those daemons do not result in data loss. If those daemons become unavailable due to an outage on a particular host, you can stop the Impala service, delete the Impala StateStore and Impala Catalog Server roles, add the roles on a different host, and restart the Impala service.
In Impala 1.2.4 and higher, you can specify a table name with INVALIDATE METADATA
after
the table is created in Hive, allowing you to make individual tables visible to Impala without doing a full
reload of the catalog metadata. Impala 1.2.4 also includes other changes to make the metadata broadcast
mechanism faster and more responsive, especially during Impala startup. See
New Features in Impala 1.2.4 for details.
Related information: Modifying Impala Startup Options, Starting Impala, Ports Used by Impala