Python не может подключиться к hiveserver2
Я попытался использовать пример на https://cwiki.apache.org/confluence/display/Hive/Setting+Up+HiveServer2 но получаю следующие ошибки:
/usr/lib/python2.7/dist-packages/pkg_resources.py:1031: UserWarning: /home/dsnadmin/.python-eggs is writable by group/others and vulnerable to attack when used with get_resource_filename. Consider a more secure location (set with .set_extraction_path or the PYTHON_EGG_CACHE environment variable).
warnings.warn(msg, UserWarning)
Traceback (most recent call last):
File "hs2.py", line 8, in <module>
database='default') as conn:
File "build/bdist.linux-x86_64/egg/pyhs2/__init__.py", line 7, in connect
File "build/bdist.linux-x86_64/egg/pyhs2/connections.py", line 46, in __init__
File "build/bdist.linux-x86_64/egg/pyhs2/cloudera/thrift_sasl.py", line 66, in open
thrift.transport.TTransport.TTransportException: Could not start SASL: Error in sasl_client_start (-4) SASL(-4): no mechanism available: No worthy mechs found
Вот журнал улья:
ERROR [HiveServer2-Handler-Pool: Thread-31]: server.TThreadPoolServer (TThreadPoolServer.java:run(296)) - Error occurred during processing of message.
java.lang.RuntimeException: org.apache.thrift.transport.TSaslTransportException: No data or no sasl data in the stream
at org.apache.thrift.transport.TSaslServerTransport$Factory.getTransport(TSaslServerTransport.java:219)
at org.apache.thrift.server.TThreadPoolServer$WorkerProcess.run(TThreadPoolServer.java:268)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:745)
Caused by: org.apache.thrift.transport.TSaslTransportException: No data or no sasl data in the stream
at org.apache.thrift.transport.TSaslTransport.open(TSaslTransport.java:328)
at org.apache.thrift.transport.TSaslServerTransport.open(TSaslServerTransport.java:41)
at org.apache.thrift.transport.TSaslServerTransport$Factory.getTransport(TSaslServerTransport.java:216)
Кто-нибудь может помочь решить проблему? Большое спасибо.
Версия ОС: Ubuntu 14.04.1
Версия Hive: apache-hive-1.2.0
SASL версия: sasl-0.1.3
Экономичная версия: thrift-0.9.1
3 ответа
Вам не хватает некоторых зависимостей, убедитесь, что вы установили cyrus-sasl-devel
а также cyrus-sasl-gssapi
:
На дистрибутиве на основе RHEL:
sudo yum install cyrus-sasl-devel cyrus-sasl-gssapi cyrus-sasl-md5 cyrus-sasl-plain
... или в дистрибутиве на основе Debian:
sudo apt-get install sasl2-bin libsasl2-2 libsasl2-dev libsasl2-modules
За @KenKennedy, также добавьте libsasl2-modules-gssapi-mit
пакет при использовании GSSAPI для аутентификации.
1 В файле hive-site.xml настройте конфигурацию, как показано ниже:
<property>
<name>hive.server2.authentication</name>
<value>NOSASL</value>
</property>
2 кода программы pyhs2 изменяются, как показано ниже:
with pyhs2.connect(host='localhost',
port=10000,
authMechanism="NOSASL",
user='user',
password='password',
database='default') as conn:
Обратите внимание, что имя пользователя и пароль не могут быть пустыми, добавьте любое имя пользователя и пароль при подключении к pyhs2.
У меня сработала установка следующей переменной среды:
SASL_PATH=/usr/lib/x86_64-linux-gnu/sasl2
Это для Ubuntu
Приведенные выше ответы не работают для моего случая, я также пробовал другие. Наконец, я решил свою проблему.(Не знаю, работает ли она для вас)
Просто выполнить
экспорт LD_LIBRARY_PATH=/usr/lib64:/usr/local/lib:$LD_LIBRARY_PATH перед запуском вашего скрипта.
Мой оригинальный LD_LIBRARY_PATH - /usr/local/lib:/usr/lib64