我们正在使用 JDBC URL,如“jdbc:vertica://80.90..:***/”。如何在此 URL 中为单独的集群设置第二个 Vertica 主机?两个集群具有相同的表、用户名和密码。唯一的区别是主机 IP。
我试过如下所示设置 URL,但它不起作用。
jdbc:vertica://00.00.00.2:1111,00.00.00.1:1111/vertica
url = "jdbc:vertica://****:***/"
url1 = "jdbc:vertica://***:****/"
properties = {
"user": "****",
"password": "*****",
"driver": "com.vertica.jdbc.Driver"
}
df =spark.read.format("JDBC").options(
url =url and url1,
query = "SELECT COUNT(*) from traffic.stats where date(time_stamp) between '2019-03-16 ' and '2019-03-17' ",
**properties
).load().show()
注:pyspark 2.4,vertica jar 9.1.1
一种方法是指定一个备份主机。
url = "jdbc:vertica://00.00.00.2:1111/vertica"
properties = {
"user": "****",
"password": "*****",
"driver": "com.Vertica.jdbc.Driver",
"ConnectionLoadBalance": 1,
"BackupServerNode": "00.00.00.1:1111"
}
这将尝试 URL 中指定的主机 (
00.00.00.2:1111
)。如果该主机不可用,它将尝试 BackupServerNode。您可以指定多个备份服务器节点,以逗号分隔。
上述解决方案仅在原始主机不可用时才有效。
另一个解决方案是,如果你想选择一个随机主机,你可以在 python 本身中执行该逻辑。
import random
host_list = ["00.00.00.2:1111", "00.00.00.1:1111"]
host = random.choice(hosts) # python2 random syntax, lookup random if using a different version of python
url = "jdbc:vertica://{0}/vertica".format(host)
注意: 连接属性
BackupServerNode
之所以这样命名,是因为它通常用于指定同一数据库集群中的备用节点,但是如果——像你一样——你有两个具有相同用户名、密码等的数据库,它还适用于连接到单独的数据库集群主机。
您可以按照以下链接在 spark 会话中设置 url 参数:
df = spark.read.format("jdbc") \
.option("url", "jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=10.200.40.5)(PORT=1521))(ADDRESS=(PROTOCOL=TCP)(HOST=10.200.40.6)(PORT=1521))(ADDRESS=(PROTOCOL=TCP)(HOST=10.200.40.7)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=OLTP.WORLD)))") \
.option("user", "***") \
.option("password", "***") \
.option("driver", "oracle.jdbc.driver.OracleDriver") \
.option("query", sql) \
.load()