[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
This commit is contained in:
GoGoWen
2023-08-10 10:48:08 +08:00
committed by GitHub
parent eafdab0cfd
commit f001b9d5c8

View File

@ -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");
}
}