url 台主机处于 JDBC 连接中

Multi url hosts in JDBC connection

我们正在使用 JDBC URL,例如 "jdbc:vertica://80.90..:***/"。如何在此 URL 中为单独的集群设置第二个 Vertica 主机?两个集群具有相同的 table、用户名和密码。唯一的区别是主机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

一种方法是指定 backup host

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之所以这样命名是因为它通常用于指定同一数据库集群中的备用节点,但是如果— 就像你自己一样 — 你有两个具有相同用户名、密码等的数据库,它也适用于连接到一个单独的数据库集群主机。