JDBC 连接中的多 url 主机

问题描述 投票:0回答:2

我们正在使用 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

jdbc pyspark apache-spark-sql vertica
2个回答
0
投票

一种方法是指定一个备份主机

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


0
投票

您可以按照以下链接在 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()

https://stackoverflow.com/a/26803031/12101409

© www.soinside.com 2019 - 2024. All rights reserved.