This is an automated email from the ASF dual-hosted git repository.

roryqi pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/gravitino.git


The following commit(s) were added to refs/heads/main by this push:
     new a0c9a3248e [#9765] improvement(iceberg-rest-server): Improve 
performance of loading tables (#9766)
a0c9a3248e is described below

commit a0c9a3248e6105de1d9f745ec7a2865a123a5ae8
Author: roryqi <[email protected]>
AuthorDate: Tue Jan 27 21:05:37 2026 +0800

    [#9765] improvement(iceberg-rest-server): Improve performance of loading 
tables (#9766)
    
    ### What changes were proposed in this pull request?
    
    Improve the performance of loading tables
    
    ### Why are the changes needed?
    
    This improvement reuse the method in
    https://github.com/apache/gravitino/pull/6576
    
    Fix #9765
    
    ### Does this PR introduce _any_ user-facing change?
    
    No.
    
    ### How was this patch tested?
    
    Passed performance tests.
---
 .../gravitino/oss/fs/OSSFileSystemProvider.java      |  2 +-
 .../apache/gravitino/s3/fs/S3FileSystemProvider.java |  2 +-
 .../gravitino/abs/fs/AzureFileSystemProvider.java    |  2 +-
 .../gravitino/gcs/fs/GCSFileSystemProvider.java      |  2 +-
 .../fileset/TestFilesetCatalogOperations.java        |  3 ++-
 .../catalog/fileset/fs/TestFileSystemUtils.java      |  2 +-
 .../gravitino/catalog/hadoop/fs/FileSystemUtils.java | 20 +++++++++++++++-----
 .../catalog/hadoop/fs/HDFSFileSystemProvider.java    |  2 +-
 .../catalog/hadoop/fs/HDFSFileSystemProxy.java       |  3 ++-
 .../catalog/hadoop/fs/LocalFileSystemProvider.java   |  3 ++-
 iceberg/iceberg-common/build.gradle.kts              |  3 +++
 .../iceberg/common/ops/IcebergCatalogWrapper.java    |  5 +++--
 12 files changed, 33 insertions(+), 16 deletions(-)

diff --git 
a/bundles/aliyun/src/main/java/org/apache/gravitino/oss/fs/OSSFileSystemProvider.java
 
b/bundles/aliyun/src/main/java/org/apache/gravitino/oss/fs/OSSFileSystemProvider.java
index 73196cd354..0f443dbcf2 100644
--- 
a/bundles/aliyun/src/main/java/org/apache/gravitino/oss/fs/OSSFileSystemProvider.java
+++ 
b/bundles/aliyun/src/main/java/org/apache/gravitino/oss/fs/OSSFileSystemProvider.java
@@ -70,7 +70,7 @@ public class OSSFileSystemProvider implements 
FileSystemProvider, SupportsCreden
 
     hadoopConfMap = additionalOSSConfig(hadoopConfMap);
 
-    Configuration configuration = 
FileSystemUtils.createConfiguration(hadoopConfMap);
+    Configuration configuration = 
FileSystemUtils.createCompatibleConfiguration(hadoopConfMap);
 
     return AliyunOSSFileSystem.newInstance(path.toUri(), configuration);
   }
diff --git 
a/bundles/aws/src/main/java/org/apache/gravitino/s3/fs/S3FileSystemProvider.java
 
b/bundles/aws/src/main/java/org/apache/gravitino/s3/fs/S3FileSystemProvider.java
index 4e04216ac7..4e4d6152d2 100644
--- 
a/bundles/aws/src/main/java/org/apache/gravitino/s3/fs/S3FileSystemProvider.java
+++ 
b/bundles/aws/src/main/java/org/apache/gravitino/s3/fs/S3FileSystemProvider.java
@@ -82,7 +82,7 @@ public class S3FileSystemProvider implements 
FileSystemProvider, SupportsCredent
 
     hadoopConfMap = additionalS3Config(hadoopConfMap);
 
-    Configuration configuration = 
FileSystemUtils.createConfiguration(hadoopConfMap);
+    Configuration configuration = 
FileSystemUtils.createCompatibleConfiguration(hadoopConfMap);
     return S3AFileSystem.newInstance(path.toUri(), configuration);
   }
 
diff --git 
a/bundles/azure/src/main/java/org/apache/gravitino/abs/fs/AzureFileSystemProvider.java
 
b/bundles/azure/src/main/java/org/apache/gravitino/abs/fs/AzureFileSystemProvider.java
index 4a107e0bd6..08d780c09f 100644
--- 
a/bundles/azure/src/main/java/org/apache/gravitino/abs/fs/AzureFileSystemProvider.java
+++ 
b/bundles/azure/src/main/java/org/apache/gravitino/abs/fs/AzureFileSystemProvider.java
@@ -75,7 +75,7 @@ public class AzureFileSystemProvider implements 
FileSystemProvider, SupportsCred
 
     hadoopConfMap = additionalAzureConfig(hadoopConfMap);
 
-    Configuration configuration = 
FileSystemUtils.createConfiguration(hadoopConfMap);
+    Configuration configuration = 
FileSystemUtils.createCompatibleConfiguration(hadoopConfMap);
     return FileSystem.newInstance(path.toUri(), configuration);
   }
 
diff --git 
a/bundles/gcp/src/main/java/org/apache/gravitino/gcs/fs/GCSFileSystemProvider.java
 
b/bundles/gcp/src/main/java/org/apache/gravitino/gcs/fs/GCSFileSystemProvider.java
index 41cc0047d6..ac62d43331 100644
--- 
a/bundles/gcp/src/main/java/org/apache/gravitino/gcs/fs/GCSFileSystemProvider.java
+++ 
b/bundles/gcp/src/main/java/org/apache/gravitino/gcs/fs/GCSFileSystemProvider.java
@@ -54,7 +54,7 @@ public class GCSFileSystemProvider implements 
FileSystemProvider, SupportsCreden
         FileSystemUtils.toHadoopConfigMap(config, 
GRAVITINO_KEY_TO_GCS_HADOOP_KEY);
     hadoopConfMap = additionalGCSConfig(hadoopConfMap);
 
-    Configuration configuration = 
FileSystemUtils.createConfiguration(hadoopConfMap);
+    Configuration configuration = 
FileSystemUtils.createCompatibleConfiguration(hadoopConfMap);
     return FileSystem.newInstance(path.toUri(), configuration);
   }
 
diff --git 
a/catalogs/catalog-fileset/src/test/java/org/apache/gravitino/catalog/fileset/TestFilesetCatalogOperations.java
 
b/catalogs/catalog-fileset/src/test/java/org/apache/gravitino/catalog/fileset/TestFilesetCatalogOperations.java
index 6d59d261a9..a0dbce64a2 100644
--- 
a/catalogs/catalog-fileset/src/test/java/org/apache/gravitino/catalog/fileset/TestFilesetCatalogOperations.java
+++ 
b/catalogs/catalog-fileset/src/test/java/org/apache/gravitino/catalog/fileset/TestFilesetCatalogOperations.java
@@ -358,7 +358,8 @@ public class TestFilesetCatalogOperations {
 
     CatalogInfo catalogInfo = randomCatalogInfo();
     ops.initialize(emptyProps, catalogInfo, FILESET_PROPERTIES_METADATA);
-    Configuration conf = FileSystemUtils.createConfiguration(GRAVITINO_BYPASS, 
ops.getConf());
+    Configuration conf =
+        FileSystemUtils.createCompatibleConfiguration(GRAVITINO_BYPASS, 
ops.getConf());
     String value = conf.get("fs.defaultFS");
     Assertions.assertEquals("file:///", value);
 
diff --git 
a/catalogs/catalog-fileset/src/test/java/org/apache/gravitino/catalog/fileset/fs/TestFileSystemUtils.java
 
b/catalogs/catalog-fileset/src/test/java/org/apache/gravitino/catalog/fileset/fs/TestFileSystemUtils.java
index 769e5e25ad..1dbc80d8b4 100644
--- 
a/catalogs/catalog-fileset/src/test/java/org/apache/gravitino/catalog/fileset/fs/TestFileSystemUtils.java
+++ 
b/catalogs/catalog-fileset/src/test/java/org/apache/gravitino/catalog/fileset/fs/TestFileSystemUtils.java
@@ -49,7 +49,7 @@ public class TestFileSystemUtils {
             "fs.s3a.impl", "v2",
             "fs.s3a.endpoint", "v3",
             "gravitino.bypass.fs.s3a.endpoint", "v4");
-    Configuration configuration = FileSystemUtils.createConfiguration(confMap);
+    Configuration configuration = 
FileSystemUtils.createCompatibleConfiguration(confMap);
     Assertions.assertEquals("v1", configuration.get("s3a-endpoint"));
     Assertions.assertEquals("v2", configuration.get("fs.s3a.impl"));
     Assertions.assertEquals("v3", configuration.get("fs.s3a.endpoint"));
diff --git 
a/catalogs/hadoop-common/src/main/java/org/apache/gravitino/catalog/hadoop/fs/FileSystemUtils.java
 
b/catalogs/hadoop-common/src/main/java/org/apache/gravitino/catalog/hadoop/fs/FileSystemUtils.java
index c2a789ea74..f9d38e6975 100644
--- 
a/catalogs/hadoop-common/src/main/java/org/apache/gravitino/catalog/hadoop/fs/FileSystemUtils.java
+++ 
b/catalogs/hadoop-common/src/main/java/org/apache/gravitino/catalog/hadoop/fs/FileSystemUtils.java
@@ -168,8 +168,11 @@ public class FileSystemUtils {
    * @param config properties map
    * @return Configuration map
    */
-  public static Configuration createConfiguration(Map<String, String> config) {
-    return createConfiguration(null, config);
+  public static Configuration createCompatibleConfiguration(Map<String, 
String> config) {
+    Map<String, String> updatedConfig = Maps.newHashMap(config);
+    updatedConfig.put(IPC_FALLBACK_TO_SIMPLE_AUTH_ALLOWED, "true");
+    updatedConfig.put(FS_DISABLE_CACHE, "true");
+    return createCompatibleConfiguration(null, updatedConfig);
   }
 
   /**
@@ -179,9 +182,19 @@ public class FileSystemUtils {
    * @param config properties map
    * @return Configuration map
    */
+  public static Configuration createCompatibleConfiguration(
+      String bypass, Map<String, String> config) {
+    Map<String, String> updatedConfig = Maps.newHashMap(config);
+    updatedConfig.put(IPC_FALLBACK_TO_SIMPLE_AUTH_ALLOWED, "true");
+    updatedConfig.put(FS_DISABLE_CACHE, "true");
+    return createConfiguration(bypass, updatedConfig);
+  }
+
   public static Configuration createConfiguration(String bypass, Map<String, 
String> config) {
     try (ByteArrayOutputStream out = new ByteArrayOutputStream()) {
       Configuration configuration = new Configuration();
+      // Please don't call the method configuration.set(key, value) here, 
because it will
+      // cause performance issue.
 
       String hdfsConfigResources = config.get(CONFIG_RESOURCES);
       if (StringUtils.isNotBlank(hdfsConfigResources)) {
@@ -205,9 +218,6 @@ public class FileSystemUtils {
       writer.close();
       configuration.addResource(new ByteArrayInputStream(out.toByteArray()));
 
-      configuration.setBoolean(FS_DISABLE_CACHE, true);
-      configuration.setBoolean(IPC_FALLBACK_TO_SIMPLE_AUTH_ALLOWED, true);
-
       return configuration;
     } catch (Exception e) {
       throw new RuntimeException("Failed to create configuration", e);
diff --git 
a/catalogs/hadoop-common/src/main/java/org/apache/gravitino/catalog/hadoop/fs/HDFSFileSystemProvider.java
 
b/catalogs/hadoop-common/src/main/java/org/apache/gravitino/catalog/hadoop/fs/HDFSFileSystemProvider.java
index e9a087558d..0711b008be 100644
--- 
a/catalogs/hadoop-common/src/main/java/org/apache/gravitino/catalog/hadoop/fs/HDFSFileSystemProvider.java
+++ 
b/catalogs/hadoop-common/src/main/java/org/apache/gravitino/catalog/hadoop/fs/HDFSFileSystemProvider.java
@@ -46,7 +46,7 @@ public class HDFSFileSystemProvider implements 
FileSystemProvider {
       throws IOException {
     Map<String, String> hadoopConfMap = additionalHDFSConfig(config);
     Configuration configuration =
-        FileSystemUtils.createConfiguration(GRAVITINO_BYPASS, hadoopConfMap);
+        FileSystemUtils.createCompatibleConfiguration(GRAVITINO_BYPASS, 
hadoopConfMap);
     return FileSystem.newInstance(path.toUri(), configuration);
   }
 
diff --git 
a/catalogs/hadoop-common/src/main/java/org/apache/gravitino/catalog/hadoop/fs/HDFSFileSystemProxy.java
 
b/catalogs/hadoop-common/src/main/java/org/apache/gravitino/catalog/hadoop/fs/HDFSFileSystemProxy.java
index 902e5f3f49..cf27d04903 100644
--- 
a/catalogs/hadoop-common/src/main/java/org/apache/gravitino/catalog/hadoop/fs/HDFSFileSystemProxy.java
+++ 
b/catalogs/hadoop-common/src/main/java/org/apache/gravitino/catalog/hadoop/fs/HDFSFileSystemProxy.java
@@ -70,7 +70,8 @@ public class HDFSFileSystemProxy implements MethodInterceptor 
{
   protected void initFileSystem(Path path, Map<String, String> config) {
     try {
       Map<String, String> hadoopConfMap = additionalHDFSConfig(config);
-      Configuration conf = 
FileSystemUtils.createConfiguration(GRAVITINO_BYPASS, hadoopConfMap);
+      Configuration conf =
+          FileSystemUtils.createCompatibleConfiguration(GRAVITINO_BYPASS, 
hadoopConfMap);
 
       conf.setBoolean(FS_DISABLE_CACHE, true);
       conf.setBoolean(IPC_FALLBACK_TO_SIMPLE_AUTH_ALLOWED, true);
diff --git 
a/catalogs/hadoop-common/src/main/java/org/apache/gravitino/catalog/hadoop/fs/LocalFileSystemProvider.java
 
b/catalogs/hadoop-common/src/main/java/org/apache/gravitino/catalog/hadoop/fs/LocalFileSystemProvider.java
index d0d34f16ec..2460e7f19c 100644
--- 
a/catalogs/hadoop-common/src/main/java/org/apache/gravitino/catalog/hadoop/fs/LocalFileSystemProvider.java
+++ 
b/catalogs/hadoop-common/src/main/java/org/apache/gravitino/catalog/hadoop/fs/LocalFileSystemProvider.java
@@ -30,7 +30,8 @@ public class LocalFileSystemProvider implements 
FileSystemProvider {
 
   @Override
   public FileSystem getFileSystem(Path path, Map<String, String> config) 
throws IOException {
-    Configuration configuration = 
FileSystemUtils.createConfiguration(GRAVITINO_BYPASS, config);
+    Configuration configuration =
+        FileSystemUtils.createCompatibleConfiguration(GRAVITINO_BYPASS, 
config);
     return FileSystem.newInstance(path.toUri(), configuration);
   }
 
diff --git a/iceberg/iceberg-common/build.gradle.kts 
b/iceberg/iceberg-common/build.gradle.kts
index 50c052d59c..16d1963a4b 100644
--- a/iceberg/iceberg-common/build.gradle.kts
+++ b/iceberg/iceberg-common/build.gradle.kts
@@ -27,6 +27,9 @@ plugins {
 dependencies {
   implementation(project(":api"))
   implementation(project(":catalogs:catalog-common"))
+  implementation(project(":catalogs:hadoop-common")) {
+    exclude("*")
+  }
   implementation(project(":core")) {
     exclude("*")
   }
diff --git 
a/iceberg/iceberg-common/src/main/java/org/apache/gravitino/iceberg/common/ops/IcebergCatalogWrapper.java
 
b/iceberg/iceberg-common/src/main/java/org/apache/gravitino/iceberg/common/ops/IcebergCatalogWrapper.java
index 04c0627dfb..864e538649 100644
--- 
a/iceberg/iceberg-common/src/main/java/org/apache/gravitino/iceberg/common/ops/IcebergCatalogWrapper.java
+++ 
b/iceberg/iceberg-common/src/main/java/org/apache/gravitino/iceberg/common/ops/IcebergCatalogWrapper.java
@@ -27,6 +27,7 @@ import java.util.Optional;
 import lombok.Getter;
 import lombok.Setter;
 import org.apache.commons.lang3.StringUtils;
+import org.apache.gravitino.catalog.hadoop.fs.FileSystemUtils;
 import org.apache.gravitino.catalog.lakehouse.iceberg.IcebergCatalogBackend;
 import org.apache.gravitino.iceberg.common.IcebergConfig;
 import org.apache.gravitino.iceberg.common.cache.SupportsMetadataLocation;
@@ -77,6 +78,7 @@ public class IcebergCatalogWrapper implements AutoCloseable {
   private String catalogUri = null;
   private Map<String, String> catalogPropertiesMap;
   private TableMetadataCache metadataCache;
+  private Configuration configuration;
 
   public IcebergCatalogWrapper(IcebergConfig icebergConfig) {
     this.icebergConfig = icebergConfig;
@@ -100,6 +102,7 @@ public class IcebergCatalogWrapper implements AutoCloseable 
{
 
     this.metadataCache = loadTableMetadataCache(icebergConfig, catalog);
     this.catalogPropertiesMap = icebergConfig.getIcebergCatalogProperties();
+    this.configuration = FileSystemUtils.createConfiguration(null, 
catalogPropertiesMap);
   }
 
   private void validateNamespace(Optional<Namespace> namespace) {
@@ -162,8 +165,6 @@ public class IcebergCatalogWrapper implements AutoCloseable 
{
    * reinitialize it again.
    */
   public void reloadHadoopConf() {
-    Configuration configuration = new Configuration();
-    this.catalogPropertiesMap.forEach(configuration::set);
     UserGroupInformation.setConfiguration(configuration);
   }
 

Reply via email to