This is an automated email from the ASF dual-hosted git repository. lide pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/master by this push: new 0fa4c78e84 [Improvement](external table) support hive external table which stores data on tencent chdfs (#15125) 0fa4c78e84 is described below commit 0fa4c78e84c6b4f20d2db8c6f0c2787100b1ad7b Author: Yulei-Yang <yulei.yang0...@gmail.com> AuthorDate: Thu Dec 22 14:32:55 2022 +0800 [Improvement](external table) support hive external table which stores data on tencent chdfs (#15125) --- .../src/main/java/org/apache/doris/analysis/BrokerDesc.java | 1 + .../src/main/java/org/apache/doris/backup/BlobStorage.java | 11 +++++++++-- .../src/main/java/org/apache/doris/backup/HdfsStorage.java | 2 +- .../org/apache/doris/catalog/HiveMetaStoreClientHelper.java | 9 +++++---- .../src/main/java/org/apache/doris/common/FeConstants.java | 1 + .../main/java/org/apache/doris/planner/BrokerScanNode.java | 3 ++- .../src/main/java/org/apache/doris/planner/HiveScanNode.java | 3 +++ 7 files changed, 22 insertions(+), 8 deletions(-) diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/BrokerDesc.java b/fe/fe-core/src/main/java/org/apache/doris/analysis/BrokerDesc.java index d0437f13c1..bac9e80b08 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/analysis/BrokerDesc.java +++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/BrokerDesc.java @@ -117,6 +117,7 @@ public class BrokerDesc extends StorageDesc implements Writable { case STREAM: return TFileType.FILE_STREAM; case BROKER: + case OFS: default: return TFileType.FILE_BROKER; } diff --git a/fe/fe-core/src/main/java/org/apache/doris/backup/BlobStorage.java b/fe/fe-core/src/main/java/org/apache/doris/backup/BlobStorage.java index eb8f0402dc..e4a3362490 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/backup/BlobStorage.java +++ b/fe/fe-core/src/main/java/org/apache/doris/backup/BlobStorage.java @@ -50,8 +50,15 @@ public abstract class BlobStorage implements Writable { public static BlobStorage create(String name, StorageBackend.StorageType type, Map<String, String> properties) { if (type == StorageBackend.StorageType.S3) { return new S3Storage(properties); - } else if (type == StorageBackend.StorageType.HDFS) { - return new HdfsStorage(properties); + } else if (type == StorageBackend.StorageType.HDFS || type == StorageBackend.StorageType.OFS) { + BlobStorage storage = new HdfsStorage(properties); + // as of ofs files, use hdfs storage, but it's type should be ofs + if (type == StorageBackend.StorageType.OFS) { + storage.setType(type); + storage.setName(type.name()); + } + + return storage; } else if (type == StorageBackend.StorageType.BROKER) { return new BrokerStorage(name, properties); } else { diff --git a/fe/fe-core/src/main/java/org/apache/doris/backup/HdfsStorage.java b/fe/fe-core/src/main/java/org/apache/doris/backup/HdfsStorage.java index e245ad6377..be858c6648 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/backup/HdfsStorage.java +++ b/fe/fe-core/src/main/java/org/apache/doris/backup/HdfsStorage.java @@ -568,6 +568,6 @@ public class HdfsStorage extends BlobStorage { @Override public StorageBackend.StorageType getStorageType() { - return StorageBackend.StorageType.HDFS; + return this.getType(); } } diff --git a/fe/fe-core/src/main/java/org/apache/doris/catalog/HiveMetaStoreClientHelper.java b/fe/fe-core/src/main/java/org/apache/doris/catalog/HiveMetaStoreClientHelper.java index ec097c3593..e43cecb0c7 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/catalog/HiveMetaStoreClientHelper.java +++ b/fe/fe-core/src/main/java/org/apache/doris/catalog/HiveMetaStoreClientHelper.java @@ -32,7 +32,6 @@ import org.apache.doris.analysis.SlotRef; import org.apache.doris.analysis.StorageBackend; import org.apache.doris.analysis.StringLiteral; import org.apache.doris.backup.BlobStorage; -import org.apache.doris.backup.S3Storage; import org.apache.doris.common.Config; import org.apache.doris.common.DdlException; import org.apache.doris.common.UserException; @@ -208,7 +207,8 @@ public class HiveMetaStoreClientHelper { private static String getAllFileStatus(List<TBrokerFileStatus> fileStatuses, List<RemoteIterator<LocatedFileStatus>> remoteIterators, BlobStorage storage) throws UserException { - boolean onS3 = storage instanceof S3Storage; + boolean needFullPath = storage.getStorageType() == StorageBackend.StorageType.S3 + || storage.getStorageType() == StorageBackend.StorageType.OFS; String hdfsUrl = ""; Queue<RemoteIterator<LocatedFileStatus>> queue = Queues.newArrayDeque(remoteIterators); while (queue.peek() != null) { @@ -229,7 +229,7 @@ public class HiveMetaStoreClientHelper { // eg: /home/work/dev/hive/apache-hive-2.3.7-bin/data/warehouse // + /dae.db/customer/state=CA/city=SanJose/000000_0 String path = fileStatus.getPath().toUri().getPath(); - if (onS3) { + if (needFullPath) { // Backend need full s3 path (with s3://bucket at the beginning) to read the data on s3. // path = "s3://bucket/path/to/partition/file_name" // eg: s3://hive-s3-test/region/region.tbl @@ -759,7 +759,8 @@ public class HiveMetaStoreClientHelper { if (remoteTable.getPartitionKeys().size() > 0) { output.append("PARTITIONED BY (\n") .append(remoteTable.getPartitionKeys().stream().map( - partition -> String.format(" `%s` `%s`", partition.getName(), partition.getType())) + partition -> + String.format(" `%s` `%s`", partition.getName(), partition.getType())) .collect(Collectors.joining(",\n"))) .append(")\n"); } diff --git a/fe/fe-core/src/main/java/org/apache/doris/common/FeConstants.java b/fe/fe-core/src/main/java/org/apache/doris/common/FeConstants.java index cfa802ea34..2bae2c7a49 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/common/FeConstants.java +++ b/fe/fe-core/src/main/java/org/apache/doris/common/FeConstants.java @@ -76,6 +76,7 @@ public class FeConstants { public static String FS_PREFIX_BOS = "bos"; public static String FS_PREFIX_COS = "cos"; public static String FS_PREFIX_OBS = "obs"; + public static String FS_PREFIX_OFS = "ofs"; public static String FS_PREFIX_HDFS = "hdfs"; public static String FS_PREFIX_FILE = "file"; public static final String INTERNAL_DB_NAME = "__internal_schema"; diff --git a/fe/fe-core/src/main/java/org/apache/doris/planner/BrokerScanNode.java b/fe/fe-core/src/main/java/org/apache/doris/planner/BrokerScanNode.java index 975479e89b..41b0d1f770 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/planner/BrokerScanNode.java +++ b/fe/fe-core/src/main/java/org/apache/doris/planner/BrokerScanNode.java @@ -317,7 +317,8 @@ public class BrokerScanNode extends LoadScanNode { // Generate on broker scan range TBrokerScanRange brokerScanRange = new TBrokerScanRange(); brokerScanRange.setParams(params); - if (brokerDesc.getStorageType() == StorageBackend.StorageType.BROKER) { + if (brokerDesc.getStorageType() == StorageBackend.StorageType.BROKER + || brokerDesc.getStorageType() == StorageBackend.StorageType.OFS) { FsBroker broker = null; try { broker = Env.getCurrentEnv().getBrokerMgr() diff --git a/fe/fe-core/src/main/java/org/apache/doris/planner/HiveScanNode.java b/fe/fe-core/src/main/java/org/apache/doris/planner/HiveScanNode.java index 13c4bae3d6..121e2df54d 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/planner/HiveScanNode.java +++ b/fe/fe-core/src/main/java/org/apache/doris/planner/HiveScanNode.java @@ -25,6 +25,7 @@ import org.apache.doris.analysis.TupleDescriptor; import org.apache.doris.catalog.HMSResource; import org.apache.doris.catalog.HiveMetaStoreClientHelper; import org.apache.doris.catalog.HiveTable; +import org.apache.doris.common.FeConstants; import org.apache.doris.common.UserException; import org.apache.doris.common.util.Util; import org.apache.doris.load.BrokerFileGroup; @@ -132,6 +133,8 @@ public class HiveScanNode extends BrokerScanNode { this.storageType = StorageBackend.StorageType.S3; } else if (storagePrefix.equalsIgnoreCase("hdfs")) { this.storageType = StorageBackend.StorageType.HDFS; + } else if (storagePrefix.equalsIgnoreCase(FeConstants.FS_PREFIX_OFS)) { + this.storageType = StorageBackend.StorageType.OFS; } else { throw new UserException("Not supported storage type: " + storagePrefix); } --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org