You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues-all@impala.apache.org by "Quanlong Huang (Jira)" <ji...@apache.org> on 2020/08/31 01:32:00 UTC
[jira] [Resolved] (IMPALA-9858) Wrong partition hit/request metrics
in profile of LocalCatalog
[ https://issues.apache.org/jira/browse/IMPALA-9858?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Quanlong Huang resolved IMPALA-9858.
------------------------------------
Fix Version/s: Impala 4.0
Resolution: Fixed
> Wrong partition hit/request metrics in profile of LocalCatalog
> --------------------------------------------------------------
>
> Key: IMPALA-9858
> URL: https://issues.apache.org/jira/browse/IMPALA-9858
> Project: IMPALA
> Issue Type: Bug
> Components: Catalog
> Affects Versions: Impala 3.1.0, Impala 3.2.0, Impala 3.3.0, Impala 3.4.0
> Reporter: Quanlong Huang
> Assignee: Quanlong Huang
> Priority: Major
> Fix For: Impala 4.0
>
>
> The LocalCatalog metrics of "CatalogFetch.Partitions.Hits" and "CatalogFetch.Partitions.Requests" in the profile are overcounted. For query "select * from functional.alltypes" where "functional.alltypes" contains 24 partitions, the partition metrics on a cold-started LocalCatalog coordinator are:
> {code:java}
> - CatalogFetch.Partitions.Hits: 48
> - CatalogFetch.Partitions.Misses: 24
> - CatalogFetch.Partitions.Requests: 72{code}
> Actually, only 48 requests are made on the local cache. 24 of them come from partition pruning and encounter cache miss. Another 24 of them come fromĀ LocalFsTable.toThriftDescriptor() and hit cache.
> The overcounting is due to a bug at [https://github.com/apache/impala/blob/f8c28f8adfd781727c311b15546a532ce65881e0/fe/src/main/java/org/apache/impala/catalog/local/CatalogdMetaProvider.java#L898]
> Code snipper:
> {code:java}
> public Map<String, PartitionMetadata> loadPartitionsByRefs(TableMetaRef table,
> ......
> final int numHits = refToMeta.size();
> final int numMisses = partitionRefs.size() - numHits;
> // Load the remainder from the catalogd.
> List<PartitionRef> missingRefs = new ArrayList<>();
> for (PartitionRef ref: partitionRefs) {
> if (!refToMeta.containsKey(ref)) missingRefs.add(ref);
> }
> if (!missingRefs.isEmpty()) {
> Map<PartitionRef, PartitionMetadata> fromCatalogd = loadPartitionsFromCatalogd(
> refImpl, hostIndex, missingRefs);
> refToMeta.putAll(fromCatalogd); // <---- refToMeta is updated here!
> // Write back to the cache.
> storePartitionsInCache(refImpl, hostIndex, fromCatalogd);
> }
> sw.stop();
> addStatsToProfile(PARTITIONS_STATS_CATEGORY, refToMeta.size(), numMisses, sw); // <--- Should use numHits instead of refToMeta.size()
> LOG.trace("Request for partitions of {}: hit {}/{}", table, refToMeta.size(),
> partitionRefs.size());
> {code}
--
This message was sent by Atlassian Jira
(v8.3.4#803005)
---------------------------------------------------------------------
To unsubscribe, e-mail: issues-all-unsubscribe@impala.apache.org
For additional commands, e-mail: issues-all-help@impala.apache.org