Подключитесь к Impala, используя клиент Impyla с аутентификацией Kerberos

Я на машине с W8, где я использую Python (дистрибутив Anaconda) для подключения к Impala в нашем кластере Hadoop с помощью пакета Impyla. Наш кластер hadoop защищен через Kerberos. Я следовал API ССЫЛКА, как настроить соединение.

    from impala.dbapi import connect
    conn = connect( host='localhost', port=21050, auth_mechanism='GSSAPI',
               kerberos_service_name='impala')

Мы используем Kerberos GSSAPI с SASL

auth_mechanism='GSSAPI'

Мне удалось установить библиотеку python-sasl для WIN8, но я все еще сталкиваюсь с этой ошибкой.

Could not start SASL: Error in sasl_client_start (-4) SASL(-4): no mechanism available: No worthy mechs found (code THRIFTTRANSPORT): TTransportException('Could not start SASL: Error in sasl_client_start (-4) SASL(-4): no mechanism available: No worthy mechs found',)

Интересно, мне все еще не хватает некоторых зависимостей.

3 ответа

Я столкнулся с той же проблемой, но я исправил ее, установив правильную версию необходимых библиотек.

Установите ниже библиотеки python с помощью pip:

six==1.12.0
bit_array==0.1.0
thrift==0.9.3
thrift_sasl==0.2.1
sasl==0.2.1
impyla==0.13.8

Код ниже отлично работает с python версия 2.7 а также 3.4.

import ssl
from impala.dbapi import connect
import os
os.system("kinit")
conn = connect(host='hostname.io', port=21050, use_ssl=True, database='default', user='urusername', kerberos_service_name='impala', auth_mechanism = 'GSSAPI')
cur = conn.cursor()
cur.execute('SHOW DATABASES;')
result=cur.fetchall()
for data in result:
    print (data) 

Установите kerberos Пакет Python, он исправит вашу проблему.

Для меня установка этого пакета исправила это: libsasl2-modules-gssapi-mit

Попробуйте это, чтобы получить таблицы для керберизованного кластера. В моем случае CDH-5.14.2-1.

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

с питоном 2.7 имея ниже пакетов.

thrift-0.9.3
thriftpy-0.3.8
thrift_sasl-0.3.0
impyla==0.14.2.2

Рабочий код

from impala.dbapi import connect
from impala.util import as_pandas

# 21000 is impala daemon port.
conn = connect(host='yourHost', port=21050, auth_mechanism='GSSAPI') 

cursor = conn.cursor()
cursor.execute("SHOW TABLES")
# After running .execute(), Impala will store the result sets on the server
# until it is fetched. Use the method .fetchall() to pull the entire result
# set over the network (you should only do it if you know dataset is small)
tables = cursor.fetchall()

print("Displaying list of tables")
# the result is a list of tuples
for t in tables:
    # we know that each row in SHOW TABLES result
    # should only contains one table name
    print(t[0])
    # exit() enable for only one table

print("eol >>>")

Для подключения Impala с помощью Python вы можете выполнить следующие шаги,

  1. Установите Coludera ODBC Драйвер для Impala.
  2. Создайте DSN, используя 64-битный драйвер ODBC, укажите данные вашего сервера, ниже приведен пример снимка экрана

    1. Используйте приведенный ниже фрагмент кода для подключения

      импорт pyodbc

      с pyodbc.connect("DSN=impala_con", autocommit=True) как conn: ... df = pd.read_sql("", conn)

Для меня работали следующие параметры подключения. Мне не нужно было устанавливать какие-либо дополнительные пакеты в Python.

connect(host="your_host", port=21050, auth_mechanism='GSSAPI', timeout=100000, use_ssl=False, ca_cert=None, ldap_user=None, ldap_password=None, kerberos_service_name='impala')

Python не может подключиться к hiveserver2

убедитесь, что вы установили cyrus-sasl-devel и cyrus-sasl-gssapi

Другие вопросы по тегам