[ 
https://issues.apache.org/jira/browse/IMPALA-11265?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17900996#comment-17900996
 ] 

ASF subversion and git services commented on IMPALA-11265:
----------------------------------------------------------

Commit ce35e81bcaaa7dca3cccee028fea82e36dd941c0 in impala's branch 
refs/heads/master from Gabor Kaszab
[ https://gitbox.apache.org/repos/asf?p=impala.git;h=ce35e81bc ]

IMPALA-11265: Part2: Store Iceberg file descriptors in encoded format

The file descriptors in HdfsPartition are cached as byte arrays to keep
the memory footprint low. They are transformed into actual
FileDescriptor objects once queried.
This patch changes IcebergContentFileStore to similarly use byte arrays
as an internal representation for file descriptors. Note, file
descriptors for Iceberg tables have 2 components: one is the same as in
HdfsPartition and the other stores Iceberg specific file metadata in an
additional byte array.

Measurements and observations:
 - I have a test table that has 110k data files. For this table the JVM
   memory usage in the catalogd got reduced from 80MB to 65MB.
 - Both HdfsPartition.FileDescriptor and IcebergContentFileStore use
   flatbuffers and in turn byte arrays to represent file descriptors and
   these byte arrays are shared between these 2 places. As a result
   there is no redundancy in storing the file descriptors both for the
   Iceberg and the Hdfs table.
 - There is no measurable difference in planning times with this patch.

Change-Id: I9d7794df999bdaf118158eace26cea610f911c0a
Reviewed-on: http://gerrit.cloudera.org:8080/21869
Tested-by: Impala Public Jenkins <[email protected]>
Reviewed-by: Gabor Kaszab <[email protected]>


> Iceberg tables have a large memory footprint in catalog cache
> -------------------------------------------------------------
>
>                 Key: IMPALA-11265
>                 URL: https://issues.apache.org/jira/browse/IMPALA-11265
>             Project: IMPALA
>          Issue Type: Improvement
>          Components: Catalog
>            Reporter: Quanlong Huang
>            Assignee: Gabor Kaszab
>            Priority: Major
>              Labels: impala-iceberg
>
> During the investigation of IMPALA-11260, I found the cache item size of a 
> (IcebergApiTableCacheKey, org.apache.iceberg.BaseTable) pair could be 30MB.
> For instance, here are the cache items of the iceberg table 
> {{{}functional_parquet.iceberg_partitioned{}}}:
> {code:java}
> weigh=3792, keyClass=class 
> org.apache.impala.catalog.local.CatalogdMetaProvider$TableCacheKey, 
> valueClass=class 
> org.apache.impala.catalog.local.CatalogdMetaProvider$TableMetaRefImpl
> weigh=14960, keyClass=class 
> org.apache.impala.catalog.local.CatalogdMetaProvider$IcebergMetaCacheKey, 
> valueClass=class org.apache.impala.thrift.TPartialTableInfo
> weigh=30546992, keyClass=class 
> org.apache.impala.catalog.local.CatalogdMetaProvider$IcebergApiTableCacheKey, 
> valueClass=class org.apache.iceberg.BaseTable
> weigh=496, keyClass=class 
> org.apache.impala.catalog.local.CatalogdMetaProvider$ColStatsCacheKey, 
> valueClass=class org.apache.hadoop.hive.metastore.api.ColumnStatisticsObj
> weigh=496, keyClass=class 
> org.apache.impala.catalog.local.CatalogdMetaProvider$ColStatsCacheKey, 
> valueClass=class org.apache.hadoop.hive.metastore.api.ColumnStatisticsObj
> weigh=496, keyClass=class 
> org.apache.impala.catalog.local.CatalogdMetaProvider$ColStatsCacheKey, 
> valueClass=class org.apache.hadoop.hive.metastore.api.ColumnStatisticsObj
> weigh=512, keyClass=class 
> org.apache.impala.catalog.local.CatalogdMetaProvider$ColStatsCacheKey, 
> valueClass=class org.apache.hadoop.hive.metastore.api.ColumnStatisticsObj
> weigh=472, keyClass=class 
> org.apache.impala.catalog.local.CatalogdMetaProvider$PartitionListCacheKey, 
> valueClass=class java.util.ArrayList
> weigh=10328, keyClass=class 
> org.apache.impala.catalog.local.CatalogdMetaProvider$PartitionCacheKey, 
> valueClass=class 
> org.apache.impala.catalog.local.CatalogdMetaProvider$PartitionMetadataImpl{code}
> Note that this table just have 20 rows. The total memory footprint size is 
> 30MB.
> For a normal partitioned partquet table, the memory footprint is not that 
> large. For instance, here are the cache items for 
> {{{}functional_parquet.alltypes{}}}:
> {code:java}
> weigh=4216, keyClass=class 
> org.apache.impala.catalog.local.CatalogdMetaProvider$TableCacheKey, 
> valueClass=class 
> org.apache.impala.catalog.local.CatalogdMetaProvider$TableMetaRefImpl
> weigh=480, keyClass=class 
> org.apache.impala.catalog.local.CatalogdMetaProvider$ColStatsCacheKey, 
> valueClass=class org.apache.hadoop.hive.metastore.api.ColumnStatisticsObj
> weigh=472, keyClass=class 
> org.apache.impala.catalog.local.CatalogdMetaProvider$ColStatsCacheKey, 
> valueClass=class org.apache.hadoop.hive.metastore.api.ColumnStatisticsObj
> weigh=488, keyClass=class 
> org.apache.impala.catalog.local.CatalogdMetaProvider$ColStatsCacheKey, 
> valueClass=class org.apache.hadoop.hive.metastore.api.ColumnStatisticsObj
> weigh=488, keyClass=class 
> org.apache.impala.catalog.local.CatalogdMetaProvider$ColStatsCacheKey, 
> valueClass=class org.apache.hadoop.hive.metastore.api.ColumnStatisticsObj
> weigh=480, keyClass=class 
> org.apache.impala.catalog.local.CatalogdMetaProvider$ColStatsCacheKey, 
> valueClass=class org.apache.hadoop.hive.metastore.api.ColumnStatisticsObj
> weigh=488, keyClass=class 
> org.apache.impala.catalog.local.CatalogdMetaProvider$ColStatsCacheKey, 
> valueClass=class org.apache.hadoop.hive.metastore.api.ColumnStatisticsObj
> weigh=488, keyClass=class 
> org.apache.impala.catalog.local.CatalogdMetaProvider$ColStatsCacheKey, 
> valueClass=class org.apache.hadoop.hive.metastore.api.ColumnStatisticsObj
> weigh=488, keyClass=class 
> org.apache.impala.catalog.local.CatalogdMetaProvider$ColStatsCacheKey, 
> valueClass=class org.apache.hadoop.hive.metastore.api.ColumnStatisticsObj
> weigh=488, keyClass=class 
> org.apache.impala.catalog.local.CatalogdMetaProvider$ColStatsCacheKey, 
> valueClass=class org.apache.hadoop.hive.metastore.api.ColumnStatisticsObj
> weigh=488, keyClass=class 
> org.apache.impala.catalog.local.CatalogdMetaProvider$ColStatsCacheKey, 
> valueClass=class org.apache.hadoop.hive.metastore.api.ColumnStatisticsObj
> weigh=496, keyClass=class 
> org.apache.impala.catalog.local.CatalogdMetaProvider$ColStatsCacheKey, 
> valueClass=class org.apache.hadoop.hive.metastore.api.ColumnStatisticsObj
> weigh=352, keyClass=class 
> org.apache.impala.catalog.local.CatalogdMetaProvider$ColStatsCacheKey, 
> valueClass=class org.apache.hadoop.hive.metastore.api.ColumnStatisticsObj
> weigh=352, keyClass=class 
> org.apache.impala.catalog.local.CatalogdMetaProvider$ColStatsCacheKey, 
> valueClass=class org.apache.hadoop.hive.metastore.api.ColumnStatisticsObj
> weigh=4248, keyClass=class 
> org.apache.impala.catalog.local.CatalogdMetaProvider$PartitionListCacheKey, 
> valueClass=class java.util.ArrayList
> weigh=1296, keyClass=class 
> org.apache.impala.catalog.local.CatalogdMetaProvider$PartitionCacheKey, 
> valueClass=class 
> org.apache.impala.catalog.local.CatalogdMetaProvider$PartitionMetadataImpl
> weigh=1296, keyClass=class 
> org.apache.impala.catalog.local.CatalogdMetaProvider$PartitionCacheKey, 
> valueClass=class 
> org.apache.impala.catalog.local.CatalogdMetaProvider$PartitionMetadataImpl
> weigh=1288, keyClass=class 
> org.apache.impala.catalog.local.CatalogdMetaProvider$PartitionCacheKey, 
> valueClass=class 
> org.apache.impala.catalog.local.CatalogdMetaProvider$PartitionMetadataImpl
> weigh=1296, keyClass=class 
> org.apache.impala.catalog.local.CatalogdMetaProvider$PartitionCacheKey, 
> valueClass=class 
> org.apache.impala.catalog.local.CatalogdMetaProvider$PartitionMetadataImpl
> weigh=1296, keyClass=class 
> org.apache.impala.catalog.local.CatalogdMetaProvider$PartitionCacheKey, 
> valueClass=class 
> org.apache.impala.catalog.local.CatalogdMetaProvider$PartitionMetadataImpl
> weigh=1296, keyClass=class 
> org.apache.impala.catalog.local.CatalogdMetaProvider$PartitionCacheKey, 
> valueClass=class 
> org.apache.impala.catalog.local.CatalogdMetaProvider$PartitionMetadataImpl
> weigh=1296, keyClass=class 
> org.apache.impala.catalog.local.CatalogdMetaProvider$PartitionCacheKey, 
> valueClass=class 
> org.apache.impala.catalog.local.CatalogdMetaProvider$PartitionMetadataImpl
> weigh=1296, keyClass=class 
> org.apache.impala.catalog.local.CatalogdMetaProvider$PartitionCacheKey, 
> valueClass=class 
> org.apache.impala.catalog.local.CatalogdMetaProvider$PartitionMetadataImpl
> weigh=1288, keyClass=class 
> org.apache.impala.catalog.local.CatalogdMetaProvider$PartitionCacheKey, 
> valueClass=class 
> org.apache.impala.catalog.local.CatalogdMetaProvider$PartitionMetadataImpl
> weigh=1288, keyClass=class 
> org.apache.impala.catalog.local.CatalogdMetaProvider$PartitionCacheKey, 
> valueClass=class 
> org.apache.impala.catalog.local.CatalogdMetaProvider$PartitionMetadataImpl
> weigh=1296, keyClass=class 
> org.apache.impala.catalog.local.CatalogdMetaProvider$PartitionCacheKey, 
> valueClass=class 
> org.apache.impala.catalog.local.CatalogdMetaProvider$PartitionMetadataImpl
> weigh=1288, keyClass=class 
> org.apache.impala.catalog.local.CatalogdMetaProvider$PartitionCacheKey, 
> valueClass=class 
> org.apache.impala.catalog.local.CatalogdMetaProvider$PartitionMetadataImpl
> weigh=1296, keyClass=class 
> org.apache.impala.catalog.local.CatalogdMetaProvider$PartitionCacheKey, 
> valueClass=class 
> org.apache.impala.catalog.local.CatalogdMetaProvider$PartitionMetadataImpl
> weigh=1296, keyClass=class 
> org.apache.impala.catalog.local.CatalogdMetaProvider$PartitionCacheKey, 
> valueClass=class 
> org.apache.impala.catalog.local.CatalogdMetaProvider$PartitionMetadataImpl
> weigh=1296, keyClass=class 
> org.apache.impala.catalog.local.CatalogdMetaProvider$PartitionCacheKey, 
> valueClass=class 
> org.apache.impala.catalog.local.CatalogdMetaProvider$PartitionMetadataImpl
> weigh=1288, keyClass=class 
> org.apache.impala.catalog.local.CatalogdMetaProvider$PartitionCacheKey, 
> valueClass=class 
> org.apache.impala.catalog.local.CatalogdMetaProvider$PartitionMetadataImpl
> weigh=1296, keyClass=class 
> org.apache.impala.catalog.local.CatalogdMetaProvider$PartitionCacheKey, 
> valueClass=class 
> org.apache.impala.catalog.local.CatalogdMetaProvider$PartitionMetadataImpl
> weigh=1296, keyClass=class 
> org.apache.impala.catalog.local.CatalogdMetaProvider$PartitionCacheKey, 
> valueClass=class 
> org.apache.impala.catalog.local.CatalogdMetaProvider$PartitionMetadataImpl
> weigh=1288, keyClass=class 
> org.apache.impala.catalog.local.CatalogdMetaProvider$PartitionCacheKey, 
> valueClass=class 
> org.apache.impala.catalog.local.CatalogdMetaProvider$PartitionMetadataImpl
> weigh=1288, keyClass=class 
> org.apache.impala.catalog.local.CatalogdMetaProvider$PartitionCacheKey, 
> valueClass=class 
> org.apache.impala.catalog.local.CatalogdMetaProvider$PartitionMetadataImpl
> weigh=1296, keyClass=class 
> org.apache.impala.catalog.local.CatalogdMetaProvider$PartitionCacheKey, 
> valueClass=class 
> org.apache.impala.catalog.local.CatalogdMetaProvider$PartitionMetadataImpl
> weigh=1288, keyClass=class 
> org.apache.impala.catalog.local.CatalogdMetaProvider$PartitionCacheKey, 
> valueClass=class 
> org.apache.impala.catalog.local.CatalogdMetaProvider$PartitionMetadataImpl
> weigh=1288, keyClass=class 
> org.apache.impala.catalog.local.CatalogdMetaProvider$PartitionCacheKey, 
> valueClass=class 
> org.apache.impala.catalog.local.CatalogdMetaProvider$PartitionMetadataImpl
> weigh=1288, keyClass=class 
> org.apache.impala.catalog.local.CatalogdMetaProvider$PartitionCacheKey, 
> valueClass=class 
> org.apache.impala.catalog.local.CatalogdMetaProvider$PartitionMetadataImpl{code}
> The total size is around 45KB.
> It worths double checking whether we need the whole 
> org.apache.iceberg.BaseTable object. Maybe we can just extract what Impala 
> needs into a custom value class.
> CC [~boroknagyz] 
> *Update:*
> I'm not sure how that measurement was performed, but I don't think that the 
> difference of table types comes from the BaseTable object, but from the way 
> we store them. Most importantly how we store file descriptors. I've made 
> measurement on the catalogd and also on the coordinator in local-catalog 
> mode. You can find the numbers in this doc:
> [https://docs.google.com/spreadsheets/d/1bTwH6wwy6CVjy1nNw-FGbec8Fi-KM9meFNC8-wtRncI/edit?usp=sharing]
>  



--
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