Repository: incubator-impala Updated Branches: refs/heads/master 44ef4cb10 -> c14a09040
IMPALA-4623: [DOCS] Document file handle caching Change-Id: I261c29eff80dc376528bba29ffb7d8e0f895e25f Reviewed-on: http://gerrit.cloudera.org:8080/8200 Reviewed-by: Joe McDonnell <[email protected]> Tested-by: Impala Public Jenkins Project: http://git-wip-us.apache.org/repos/asf/incubator-impala/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-impala/commit/d8bdea5e Tree: http://git-wip-us.apache.org/repos/asf/incubator-impala/tree/d8bdea5e Diff: http://git-wip-us.apache.org/repos/asf/incubator-impala/diff/d8bdea5e Branch: refs/heads/master Commit: d8bdea5e8206b47bf5bbcf8bda7b4edd7fec935a Parents: 44ef4cb Author: John Russell <[email protected]> Authored: Tue Oct 3 15:09:46 2017 -0700 Committer: Impala Public Jenkins <[email protected]> Committed: Thu Oct 5 23:49:43 2017 +0000 ---------------------------------------------------------------------- docs/impala_keydefs.ditamap | 1 + docs/topics/impala_known_issues.xml | 27 ++++++++++++++ docs/topics/impala_scalability.xml | 64 ++++++++++++++++++++++++++++++++ 3 files changed, 92 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-impala/blob/d8bdea5e/docs/impala_keydefs.ditamap ---------------------------------------------------------------------- diff --git a/docs/impala_keydefs.ditamap b/docs/impala_keydefs.ditamap index 3068ca4..d92fdc5 100644 --- a/docs/impala_keydefs.ditamap +++ b/docs/impala_keydefs.ditamap @@ -10946,6 +10946,7 @@ under the License. <keydef href="topics/impala_scalability.xml#big_tables" keys="big_tables"/> <keydef href="topics/impala_scalability.xml#kerberos_overhead_cluster_size" keys="kerberos_overhead_cluster_size"/> <keydef href="topics/impala_scalability.xml#scalability_hotspots" keys="scalability_hotspots"/> + <keydef href="topics/impala_scalability.xml#scalability_file_handle_cache" keys="scalability_file_handle_cache"/> <keydef href="topics/impala_partitioning.xml" keys="partitioning"/> <keydef href="topics/impala_partitioning.xml#partitioning_choosing" keys="partitioning_choosing"/> http://git-wip-us.apache.org/repos/asf/incubator-impala/blob/d8bdea5e/docs/topics/impala_known_issues.xml ---------------------------------------------------------------------- diff --git a/docs/topics/impala_known_issues.xml b/docs/topics/impala_known_issues.xml index 51920c9..14ff4e3 100644 --- a/docs/topics/impala_known_issues.xml +++ b/docs/topics/impala_known_issues.xml @@ -331,6 +331,33 @@ https://issues.apache.org/jira/browse/IMPALA-2144 - Don't have </concept> + <concept id="ki_file_handle_cache"> + <title>Interaction of File Handle Cache with HDFS Appends and Short-Circuit Reads</title> + <conbody> + <p> + If a data file used by Impala is being continuously appended or overwritten in place by an + HDFS mechanism, such as <cmdname>hdfs dfs -appendToFile</cmdname>, interaction with the + file handle caching feature in <keyword keyref="impala210_full"/> and higher could cause + short-circuit reads to sometimes be disabled on some DataNodes. When a mismatch is detected + between the cached file handle and a data block that was rewritten because of an append, + short-circuit reads are turned off on the affected host for a 10-minute period. + </p> + <p> + The possibility of encountering such an issue is the reason why the file handle caching + feature is currently turned off by default. See <xref keyref="scalability_file_handle_cache"/> + for information about this feature and how to enable it. + </p> + <p><b>Bug:</b> <xref href="https://issues.apache.org/jira/browse/HDFS-12528" scope="external" format="html">HDFS-12528</xref></p> + <p><b>Severity:</b> High</p> + <!-- <p><b>Resolution:</b> </p> --> + <p><b>Workaround:</b> Verify whether your ETL process is susceptible to this issue before enabling the file handle caching feature. + You can set the <cmdname>impalad</cmdname> configuration option <codeph>unused_file_handle_timeout_sec</codeph> to a time period + that is shorter than the HDFS setting <codeph>dfs.client.read.shortcircuit.streams.cache.expiry.ms</codeph>. (Keep in mind that + the HDFS setting is in milliseconds while the Impala setting is in seconds.) + </p> + </conbody> + </concept> + </concept> <concept id="known_issues_usability"> http://git-wip-us.apache.org/repos/asf/incubator-impala/blob/d8bdea5e/docs/topics/impala_scalability.xml ---------------------------------------------------------------------- diff --git a/docs/topics/impala_scalability.xml b/docs/topics/impala_scalability.xml index 7c24fe2..2533e16 100644 --- a/docs/topics/impala_scalability.xml +++ b/docs/topics/impala_scalability.xml @@ -941,4 +941,68 @@ so other secure services might be affected temporarily. </conbody> </concept> + <concept id="scalability_file_handle_cache" rev="2.10.0 IMPALA-4623"> + <title>Scalability Considerations for NameNode Traffic with File Handle Caching</title> + <conbody> + <p> + One scalability aspect that affects heavily loaded clusters is the load on the HDFS + NameNode, from looking up the details as each HDFS file is opened. Impala queries + often access many different HDFS files, for example if a query does a full table scan + on a table with thousands of partitions, each partition containing multiple data files. + Accessing each column of a Parquet file also involves a separate <q>open</q> call, + further increasing the load on the NameNode. High NameNode overhead can add startup time + (that is, increase latency) to Impala queries, and reduce overall throughput for non-Impala + workloads that also require accessing HDFS files. + </p> + <p> + In <keyword keyref="impala210_full"/> and higher, you can reduce NameNode overhead by enabling + a caching feature for HDFS file handles. Data files that are accessed by different queries, + or even multiple times within the same query, can be accessed without a new <q>open</q> + call and without fetching the file details again from the NameNode. + </p> + <p> + Because this feature only involves HDFS data files, it does not apply to non-HDFS tables, + such as Kudu or HBase tables, or tables that store their data on cloud services such as + S3 or ADLS. Any read operations that perform remote reads also skip the cached file handles. + </p> + <p> + This feature is turned off by default. To enable it, set the configuration option + <codeph>max_cached_file_handles</codeph> to a non-zero value for each <cmdname>impalad</cmdname> + daemon. Consider an initial starting value of 20 thousand, and adjust upward if NameNode + overhead is still significant, or downward if it is more important to reduce the extra memory usage + on each host. Each cache entry consumes 6 KB, meaning that caching 20,000 file handles requires + up to 120 MB on each DataNode. The exact memory usage varies depending on how many file handles + have actually been cached; memory is freed as file handles are evicted from the cache. + </p> + <p> + If a manual HDFS operation moves a file to the HDFS Trashcan while the file handle is cached, + Impala still accesses the contents of that file. This is a change from prior behavior. Previously, + accessing a file that was in the trashcan would cause an error. This behavior only applies to + non-Impala methods of removing HDFS files, not the Impala mechanisms such as <codeph>TRUNCATE TABLE</codeph> + or <codeph>DROP TABLE</codeph>. + </p> + <p> + If files are removed, replaced, or appended by HDFS operations outside of Impala, the way to bring the + file information up to date is to run the <codeph>REFRESH</codeph> statement on the table. + </p> + <p> + File handle cache entries are evicted as the cache fills up, or based on a timeout period + when they have not been accessed for some time. + </p> + <p> + To evaluate the effectiveness of file handle caching for a particular workload, issue the + <codeph>PROFILE</codeph> statement in <cmdname>impala-shell</cmdname> or examine query + profiles in the Impala web UI. Look for the ratio of <codeph>CachedFileHandlesHitCount</codeph> + (ideally, should be high) to <codeph>CachedFileHandlesMissCount</codeph> (ideally, should be low). + Before starting any evaluation, run some representative queries to <q>warm up</q> the cache, + because the first time each data file is accessed is always recorded as a cache miss. + To see metrics about file handle caching for each <cmdname>impalad</cmdname> instance, + examine the <uicontrol>/metrics</uicontrol> page in the Impala web UI, in particular the fields + <uicontrol>impala-server.io.mgr.cached-file-handles-miss-count</uicontrol>, + <uicontrol>impala-server.io.mgr.cached-file-handles-hit-count</uicontrol>, and + <uicontrol>impala-server.io.mgr.num-cached-file-handles</uicontrol>. + </p> + </conbody> + </concept> + </concept>
