Многостраничные хосты в соединении JDBC - PullRequest
0 голосов
/ 24 марта 2019

Мы используем URL-адрес JDBC, например, «jdbc: vertica: //80.90..: *** /».Как я могу установить второй хост Vertica для отдельного кластера в этом URL?Оба кластера имеют одинаковую таблицу, имя пользователя и пароль.Единственное отличие заключается в 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

1 Ответ

0 голосов
/ 25 марта 2019

Один из способов сделать это - указать резервный хост .

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 названо так, поскольку оно обычно используется для указания альтернативного узла в той же базе данныхкластера, но если - как и у вас - у вас есть две базы данных с одинаковыми именем пользователя, паролем и т. д., это также будет работать для подключения к отдельному хосту кластера баз данных.

...