From f001b9d5c897ff8a548e210c71268141c19b8e8b Mon Sep 17 00:00:00 2001 From: GoGoWen <82132356+GoGoWen@users.noreply.github.com> Date: Thu, 10 Aug 2023 10:48:08 +0800 Subject: [PATCH] [enhance](multi-catalog) support multi name service when config hive catalog #21825 when create catalog with multi-servicename like below: REATE CATALOG hive_prod_t1 PROPERTIES ( 'type'='hms', 'hive.metastore.uris' = 'thrift://10.198.xxx:9011,thrift://11.11.xxx:9001,thrift://10.198.xxx:9011', 'hadoop.username' = 'user', 'dfs.nameservices'='ns1007,ns1017', 'dfs.ha.namenodes.ns1007'='nn1,nn2', 'dfs.namenode.rpc-address.ns1007.nn1'='10.198.xxxx:8120', 'dfs.namenode.rpc-address.ns1007.nn2'='10.198.xxx:8120', 'dfs.client.failover.proxy.provider.ns1007'='org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider', 'dfs.ha.namenodes.ns1017'='nn1,nn2', 'dfs.namenode.rpc-address.ns1017.nn1'='10.198.xxxx:8120', 'dfs.namenode.rpc-address.ns1017.nn2'='10.198.xxxx:8120', 'dfs.client.failover.proxy.provider.ns1017'='org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider' ); the result will be: ERROR 1105 (HY000): errCode = 2, detailMessage = Missing dfs.ha.namenodes.ns1007,ns1017 property --- .../doris/datasource/HMSExternalCatalog.java | 38 ++++++++++--------- 1 file changed, 21 insertions(+), 17 deletions(-) diff --git a/fe/fe-core/src/main/java/org/apache/doris/datasource/HMSExternalCatalog.java b/fe/fe-core/src/main/java/org/apache/doris/datasource/HMSExternalCatalog.java index 03b9e53f4c..462fd3527a 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/datasource/HMSExternalCatalog.java +++ b/fe/fe-core/src/main/java/org/apache/doris/datasource/HMSExternalCatalog.java @@ -99,24 +99,28 @@ public class HMSExternalCatalog extends ExternalCatalog { if (Strings.isNullOrEmpty(dfsNameservices)) { return; } - String namenodes = catalogProperty.getOrDefault("dfs.ha.namenodes." + dfsNameservices, ""); - if (Strings.isNullOrEmpty(namenodes)) { - throw new DdlException("Missing dfs.ha.namenodes." + dfsNameservices + " property"); - } - String[] names = namenodes.split(","); - for (String name : names) { - String address = catalogProperty.getOrDefault("dfs.namenode.rpc-address." + dfsNameservices + "." + name, - ""); - if (Strings.isNullOrEmpty(address)) { - throw new DdlException( - "Missing dfs.namenode.rpc-address." + dfsNameservices + "." + name + " property"); + + String[] nameservices = dfsNameservices.split(","); + for (String dfsservice : nameservices) { + String namenodes = catalogProperty.getOrDefault("dfs.ha.namenodes." + dfsservice, ""); + if (Strings.isNullOrEmpty(namenodes)) { + throw new DdlException("Missing dfs.ha.namenodes." + dfsservice + " property"); + } + String[] names = namenodes.split(","); + for (String name : names) { + String address = catalogProperty.getOrDefault("dfs.namenode.rpc-address." + dfsservice + "." + name, + ""); + if (Strings.isNullOrEmpty(address)) { + throw new DdlException( + "Missing dfs.namenode.rpc-address." + dfsservice + "." + name + " property"); + } + } + String failoverProvider = catalogProperty.getOrDefault("dfs.client.failover.proxy.provider." + dfsservice, + ""); + if (Strings.isNullOrEmpty(failoverProvider)) { + throw new DdlException( + "Missing dfs.client.failover.proxy.provider." + dfsservice + " property"); } - } - String failoverProvider = catalogProperty.getOrDefault("dfs.client.failover.proxy.provider." + dfsNameservices, - ""); - if (Strings.isNullOrEmpty(failoverProvider)) { - throw new DdlException( - "Missing dfs.client.failover.proxy.provider." + dfsNameservices + " property"); } }