Не реальная проблема (опечатка в URL) — Сбой подключения Netezza PySpark во время работы DbVisualizer

#jdbc #pyspark #netezza #windows-10-desktop

#jdbc #pyspark #netezza #windows-10-рабочий стол

Вопрос:

Обновление: проблема решена. Это была опечатка в URL.


Я пытаюсь прочитать данные из Netezza с помощью pyspark в Windows 10 1909.

Я могу читать из него с помощью DbVisualizer без проблем. Затем я попытался запустить pyspark --driver-class-path <path to nzjdbc.jar> --jars <path to nzjdbc.jar> --master local[*] (тот же компьютер, VPN-соединение, jar-файл драйвера JDBC и все).

Я использовал этот код из оболочки pyspark:

 dataframe = spark.read.format("jdbc").options(
    url="jdbc:netezza://<server>:5480/<database>",
    dbtable="ADMIN.<table>",
    user="***",
    password="***",
    driver="org.netezza.Driver",
).load()
  

но у меня это не получается, со следующим стеком, примерно через 10-20 секунд (я также пытался добавить queryTimeout="300" , но это ничего не изменило):

 "...AppDataLocalContinuumminiconda3envssparklibsite-packagespysparkpythonlibpy4j-0.10.9-src.zippy4jprotocol.py", line 328, in get_return_value
py4j.protocol.Py4JJavaError: An error occurred while calling o41.load.
: org.netezza.error.NzSQLException: Connection timed out: connect
        at org.netezza.sql.NzConnection.initSocket(NzConnection.java:2859)
        at org.netezza.sql.NzConnection.open(NzConnection.java:293)
        at org.netezza.datasource.NzDatasource.getConnection(NzDatasource.java:675)
        at org.netezza.datasource.NzDatasource.getConnection(NzDatasource.java:662)
        at org.netezza.Driver.connect(Driver.java:155)
        at org.apache.spark.sql.execution.datasources.jdbc.JdbcUtils$.$anonfun$createConnectionFactory$1(JdbcUtils.scala:64)
        at org.apache.spark.sql.execution.datasources.jdbc.JDBCRDD$.resolveTable(JDBCRDD.scala:56)
        at org.apache.spark.sql.execution.datasources.jdbc.JDBCRelation$.getSchema(JDBCRelation.scala:226)
        at org.apache.spark.sql.execution.datasources.jdbc.JdbcRelationProvider.createRelation(JdbcRelationProvider.scala:35)
        at org.apache.spark.sql.execution.datasources.DataSource.resolveRelation(DataSource.scala:339)
        at org.apache.spark.sql.DataFrameReader.loadV1Source(DataFrameReader.scala:279)
        at org.apache.spark.sql.DataFrameReader.$anonfun$load$2(DataFrameReader.scala:268)
        at scala.Option.getOrElse(Option.scala:189)
        at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:268)
        at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:203)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at py4j.reflection.MethodInvoker.invoke(MethodInvoker.java:244)
        at py4j.reflection.ReflectionEngine.invoke(ReflectionEngine.java:357)
        at py4j.Gateway.invoke(Gateway.java:282)
        at py4j.commands.AbstractCommand.invokeMethod(AbstractCommand.java:132)
        at py4j.commands.CallCommand.execute(CallCommand.java:79)
        at py4j.GatewayConnection.run(GatewayConnection.java:238)
        at java.lang.Thread.run(Unknown Source)
  

Сотрудник может без проблем запускать тот же код со своего Mac (также через VPN).

Есть ли что-то в Windows или в самой Netezza, что может повлиять на то, какие клиенты могут подключаться к Netezza? Или я мог что-то упустить в pyspark команде?

Комментарии:

1. Попробуйте отключить брандмауэр на вашем компьютере (временно) и проверить, поможет ли это?

2. Спасибо @Lars G Olsen. Это был я все время, я допустил опечатку в URL

3. Lol, я все время являюсь причиной «ошибки 40» (считается, что 40 см — это расстояние, которое пользователь имеет от экрана)

4. @LarsGOlsen Да, можно подумать, что можно научиться, совершив такую ошибку много раз в прошлом. В свою защиту я думаю, что это была опечатка, которая не была очевидна сразу, потому что слово, которое я написал с ошибкой, похоже, имеет другие варианты написания, а опечатки в строках, как известно, трудно уловить, поскольку это

Ответ №1:

Можете ли вы попробовать увеличить значение loginTimeout? К вашему СВЕДЕНИЮ, queryTimeout относится к тайм-ауту для одного запроса.

Комментарии:

1. Где мне это изменить? Я не рассматриваю это как вариант в SparkSession.read.jdbc

2. После еще некоторых поисков я предполагаю, что вы хотели добавить его в URL. Я попробую это, хотя по умолчанию, согласно веб-сайту IBM, должно быть бесконечным

3. Как я и подозревал, это было не так. Он выдает «Время ожидания входа в систему» для очень маленьких значений loginTimeout , но если я хоть немного увеличу его, все вернется на круги своя, с первоначальным исключением. Спасибо за идею, хотя!

Ответ №2:

Я обнаружил опечатку в своем URL. Это был действительно хитрый

Комментарии:

1. Кажется, я не могу удалить этот вопрос, хотя сомневаюсь, что кто-нибудь найдет его полезным

2. Все в порядке, ваш URL-адрес «не забудьте проверить орфографию» не является необычным решением, и тайм-ауты могут быть многими другими 🙂

3. Да, в этом все дело — проверка орфографии не выявила бы этого. Было бы действительно полезно, если бы в исключении было более полезное сообщение, например «Сбой разрешения DNS» или что-то в этом роде