From 2ae02efd46af993e1fa324de274fd10680a4866d Mon Sep 17 00:00:00 2001 From: GoGoWen <82132356+GoGoWen@users.noreply.github.com> Date: Thu, 25 Jan 2024 23:46:04 +0800 Subject: [PATCH] [BugFix](MutilCatalog) fix local file system unavailable in iceberg hadoop catalog (#26769) create catalog in local test/dev env like below: create catalog iceberg PROPERTIES ('type'='iceberg','iceberg.catalog.type' = 'hadoop', 'warehouse' = '/export/workspace/warehouse'); we will get error: "Unrecognized 'warehouse' location format because name service is required." --- .../iceberg/IcebergHadoopExternalCatalog.java | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/fe/fe-core/src/main/java/org/apache/doris/datasource/iceberg/IcebergHadoopExternalCatalog.java b/fe/fe-core/src/main/java/org/apache/doris/datasource/iceberg/IcebergHadoopExternalCatalog.java index 06d1a4caaa..b60360e902 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/datasource/iceberg/IcebergHadoopExternalCatalog.java +++ b/fe/fe-core/src/main/java/org/apache/doris/datasource/iceberg/IcebergHadoopExternalCatalog.java @@ -38,13 +38,16 @@ public class IcebergHadoopExternalCatalog extends IcebergExternalCatalog { String warehouse = props.get(CatalogProperties.WAREHOUSE_LOCATION); Preconditions.checkArgument(StringUtils.isNotEmpty(warehouse), "Cannot initialize Iceberg HadoopCatalog because 'warehouse' must not be null or empty"); - String nameService = StringUtils.substringBetween(warehouse, HdfsResource.HDFS_FILE_PREFIX, "/"); - if (StringUtils.isEmpty(nameService)) { - throw new IllegalArgumentException("Unrecognized 'warehouse' location format" - + " because name service is required."); - } + catalogProperty = new CatalogProperty(resource, props); - catalogProperty.addProperty(HdfsResource.HADOOP_FS_NAME, HdfsResource.HDFS_FILE_PREFIX + nameService); + if (StringUtils.startsWith(warehouse, HdfsResource.HDFS_PREFIX)) { + String nameService = StringUtils.substringBetween(warehouse, HdfsResource.HDFS_FILE_PREFIX, "/"); + if (StringUtils.isEmpty(nameService)) { + throw new IllegalArgumentException("Unrecognized 'warehouse' location format" + + " because name service is required."); + } + catalogProperty.addProperty(HdfsResource.HADOOP_FS_NAME, HdfsResource.HDFS_FILE_PREFIX + nameService); + } } @Override