Не удалось настроить соединение DB2/DashDB JDBC в Apache Airflow

Я пытаюсь создать соединение DB2/DashDB с помощью пользовательского интерфейса Airflow. Я добавил драйвер db2jcc4.jar и указал путь, а также имя класса com.ibm.db2.jcc.DB2Driver.class.

Я пытался выполнить простой запрос (в пользовательском интерфейсе ad hoc) и всегда получаю ту же ошибку.

java.lang.RuntimeException: класс com.ibm.db2.jcc.DB2Driver.class не найден

Кому-нибудь нужно было раньше настраивать соединение DB2/DashDB в Apache Airflow?

Ничего не нашел в сети по этому поводу.

Спасибо


person Bruno Faria    schedule 28.01.2017    source источник
comment
Вы указали это с помощью .class? Если да, пробовали ли вы просто com.ibm.db2.jcc.DB2Driver?   -  person data_henrik    schedule 30.01.2017
comment
Эй, я пробовал оба способа.   -  person Bruno Faria    schedule 04.02.2017
comment
Вы поняли это? Я столкнулся с той же проблемой, но с драйвером Netezza JDBC.   -  person Alienfluid    schedule 13.04.2017
comment
К сожалению, пока нет. Похоже, мне придется поработать над реализацией коннектора DB2 для Airflow, но я пока не сосредоточен на этом. В качестве обходного пути я создал некоторый код Python для выполнения обновлений в моей db2 и вызвал его с помощью оператора python.   -  person Bruno Faria    schedule 15.04.2017


Ответы (2)


Может быть глупо проверять, но убедитесь, что у вас нет начального пробела в URL-адресе подключения, пути к драйверу и классе драйвера. Также пользователь «воздушного потока» (или тот, кто запускает процесс воздушного потока, должен иметь доступ к пути к драйверу.

person user7126545    schedule 16.02.2017

Если вы еще не поняли это, я столкнулся с той же проблемой.

После некоторой отладки я обнаружил, что файл jdbc_hook.py здесь https://github.com/apache/incubator-airflow/blob/master/airflow/hooks/jdbc_hook.py#L55 отсутствует 1 параметр, ожидаемый в вызове метода jaydebeapi.connect.

В частности отсутствует второй параметр, который должен быть URL-адресом соединения.

Я изменил код внутри метода get_conn на следующий, чтобы попробовать, и это сработало.

  def get_conn(self):
    ......

    conn = jaydebeapi.connect(jdbc_driver_name,
                             host,
                      driver_args=[str(login), str(psw)],
                              jars=jdbc_driver_loc)
    return conn    

Обратите внимание на host, добавленное к вызову jaydebeapi.connect.

Думал открыть PR, но потом пересмотрел, у них уже что-то есть в паре мест (ищите jdbc в PR Airflow):

https://github.com/apache/incubator-airflow/pull/2227

person Carlo Scarioni    schedule 19.06.2017