我们正在使用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
答案 0 :(得分:0)
执行此操作的一种方法是指定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
之所以这样命名,是因为它通常用于指定同一数据库集群中的备用节点,但是如果(例如您自己)有两个数据库,相同的用户名,密码等,也可以用于连接到单独的数据库集群主机。