Zoltán Borók-Nagy created IMPALA-15428:
------------------------------------------

             Summary: HdfsPartition keeps per-partition host and host:disk sets 
that are only used for a log line
                 Key: IMPALA-15428
                 URL: https://issues.apache.org/jira/browse/IMPALA-15428
             Project: IMPALA
          Issue Type: Improvement
          Components: Catalog
            Reporter: Zoltán Borók-Nagy


IMPALA-13122 added two sets to FeFsTable.FileMetadataStats 
(FeFsTable.java:149-155):
{{uniqueHostIndices}} and {{uniqueHostDiskPairs}}. A FileMetadataStats object 
is stored in
every HdfsPartition. The sets are:
* filled for every file and block during loading;
* deep-copied in set() on every {{HdfsPartition.Builder(partition)}} 
(FeFsTable.java:194);
* merged across partitions (FeFsTable.java:208).

Their only consumer is toLogString(), i.e. the host statistics in the 
table-loading log
line. The sets are retained in catalogd for the lifetime of the table, and they 
cost CPU
on every partition rebuild. This affects HDFS and Ozone tables; object-store 
files have
no block locations.

h3. Measurements

Standalone harness using the real classes, retained memory per partition:

||Files per partition||Current||With fix||
|10|3288 B|100 B|
|100|20.9 KB|100 B|
|100 × 4 blocks|51.8 KB|100 B|

These numbers are for a 100-host cluster; with 1000 hosts, 10 files per 
partition cost
about 4.3 KB. With 10 files per partition on 100 hosts, this saves about 319 MB 
of catalogd heap per 100k
partitions (the 100k-partition run measured 318.8 MB). Builder set() becomes 36x
faster. In the same harness, per-partition catalogd load CPU is 1.2–2.4x lower 
and REFRESH
1.7–2.8x lower. With use_local_catalog=false, incremental coordinator updates 
become
87x faster (5.5 → 0.06 us per partition).

h3. Proposed fix

* Collect the host statistics in a transient aggregate inside the loader
(ParallelFileMetadataLoader), used only for the log line.
* Strip or skip the sets before the stats object is stored in the partition, 
and make
fromThrift()/set()/merge() ignore them.
* Keep the public getters returning counts, in case extensions use them.

The host counts in the log line will then describe the files listed in this 
load only.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to