Использование Python для подключения к базе данных Impala (ошибка thriftpy) - PullRequest
0 голосов
/ 01 февраля 2019

То, что я пытаюсь сделать, очень просто: подключиться к базе данных Impala с помощью Python:

from impala.dbapi import connect

conn = connect(host='impala', port=21050, auth_mechanism='PLAIN')

Для этого я использую пакет Impyla.Я получил эту ошибку:

Traceback (most recent call last):
  File "/usr/local/lib/python3.6/dist-packages/thriftpy/transport/socket.py", line 96, in open
    self.sock.connect(addr)
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/alaaeddine/PycharmProjects/test/data_test.py", line 3, in <module>
    conn = connect(host='impala', port=21050, auth_mechanism='PLAIN')
  File "/usr/local/lib/python3.6/dist-packages/impala/dbapi.py", line 147, in connect
    auth_mechanism=auth_mechanism)
  File "/usr/local/lib/python3.6/dist-packages/impala/hiveserver2.py", line 758, in connect
    transport.open()
  File "/usr/local/lib/python3.6/dist-packages/thrift_sasl/__init__.py", line 61, in open
    self._trans.open()
  File "/usr/local/lib/python3.6/dist-packages/thriftpy/transport/socket.py", line 104, in open
    message="Could not connect to %s" % str(addr))
thriftpy.transport.TTransportException: TTransportException(type=1, message="Could not connect to ('impala', 21050)")

Пробовал также пакет Ibis, но потерпел неудачу с той же ошибкой, связанной с thriftpy.

В Windows, используя Dbeaver, я мог подключиться к базе данных, используя официальный JDBC Clouderaразъем.Мои вопросы:

  • Должен ли мой JDBC-коннектор передаваться как параметр в моем коде соединения?Я провел поиск и не смог найти что-то, указывающее на это направление.
  • Стоит ли попробовать что-то еще, кроме пакетов Ibis и Impyla?Я испытал много проблем, связанных с версиями и зависимостей при их использовании.Если да, что бы вы посоветовали в качестве альтернативы?

Спасибо!

Ответы [ 2 ]

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

Ваше доменное имя impala не должно разрешаться.Вы можете сделать nslookup impala в командной строке?Если вы используете Docker, вам нужно иметь имя службы docker в docker-compose как «impala» или иметь опцию «extra_hosts».Или вы всегда можете добавить его в / etc / hosts (Windows / Drivers / etc / hosts) как impala 127.0.0.1

Также попробуйте «NOSASL» вместо «PLAIN», что иногда лучше работает при отключенной защите.

0 голосов
/ 01 февраля 2019

Решено: я использовал пакет pyhive вместо Ibis / Impyla.Вот пример:

#import hive from pyhive
from pyhive import hive

#establish the connection to the db
conn = hive.Connection(host='host_IP_addr', port='conn_port', auth='auth_type', database='my_db')

#prepare the cursor for the queries
cursor = conn.cursor()

#execute a query
cursor.execute("SHOW TABLES")

#navigate and display the results 
for table in cursor.fetchall():
    print(table)
...