Python Pyhive модуль не может импортировать имя куста
Я хочу подключить Python к улью, используя pyhive. Я использую приведенный ниже скрипт на python, который будет выполняться на моем локальном компьютере.
#!/usr/bin/env python
# coding: utf-8
from pyhive import hive
from TCLIService.ttypes import TOperationState
def mysql_connect(host, port, username):
conn = hive.Connection(host=host, port=port, username=username)
return conn.cursor()
cursor = mysql_connect("localhost", 50070, "hduser")
cursor.execute("show databases")
print_log(cursor)
У меня есть pyhive подарок в папку /usr/local/lib/python2.7/dist-packages, но я в конечном итоге в следующем выводе
vaibhav@vaibhav-Lenovo-G570:~/Desktop/Python/Automation$ ./pyhive_test.py
Traceback (most recent call last):
File "./pyhive_test.py", line 9, in <module>
cursor = mysql_connect("localhost", 50070, "hduser")
File "./pyhive_test.py", line 6, in mysql_connect
conn = hive.Connection(host=host, port=port, username=username)
File "/usr/local/lib/python2.7/dist-packages/pyhive/hive.py", line 131, in __init__
self._transport.open()
File "/usr/local/lib/python2.7/dist-packages/thrift_sasl/__init__.py", line 80, in open
status, payload = self._recv_sasl_message()
File "/usr/local/lib/python2.7/dist-packages/thrift_sasl/__init__.py", line 101, in _recv_sasl_message
payload = read_all_compat(self._trans, length)
File "/usr/local/lib/python2.7/dist-packages/thrift_sasl/six.py", line 31, in <lambda>
read_all_compat = lambda trans, sz: trans.readAll(sz)
File "/home/vaibhav/.local/lib/python2.7/site-packages/thrift/transport/TTransport.py", line 60, in readAll
chunk = self.read(sz - have)
File "/home/vaibhav/.local/lib/python2.7/site-packages/thrift/transport/TSocket.py", line 132, in read
message='TSocket read 0 bytes')
thrift.transport.TTransport.TTransportException: TSocket read 0 bytes
Изменения1. Имя файлов было изменено с Pyhive на pyhive_test
- pyhive.py был удален из каталога
Возможное решение пробовали:1. Были установлены две версии python2.7 и python 3.4. Я удалил Python3.4, но, похоже, папка присутствует в / usr / local / lib /. Я запустил некоторые из приведенных ниже команд, чтобы проверить, где установлен мой python и какие пакеты доступны в PYTHONPATH.
vaibhav@vaibhav-Lenovo-G570:~$ which -a python
/usr/bin/python
vaibhav@vaibhav-Lenovo-G570:~$ python -c "import sys, pprint; pprint.pprint(sys.path)"
['',
'/home/vaibhav',
'/usr/lib/python2.7/dist-packages',
'/usr/lib/python2.7',
'/usr/lib/python2.7/plat-x86_64-linux-gnu',
'/usr/lib/python2.7/lib-tk',
'/usr/lib/python2.7/lib-old',
'/usr/lib/python2.7/lib-dynload',
'/home/vaibhav/.local/lib/python2.7/site-packages',
'/usr/local/lib/python2.7/dist-packages',
'/usr/lib/python2.7/dist-packages/PILcompat',
'/usr/lib/python2.7/dist-packages/gtk-2.0',
'/usr/lib/pymodules/python2.7',
'/usr/lib/python2.7/dist-packages/ubuntu-sso-client']
2. Получил ссылку по упомянутой здесь ссылке, которую они упоминали, чтобы использовать ее в виртуальной среде или использовать чистую анаконду. Не использовал ни один из них, как и не знаю, как это повлияет на уже существующую конфигурацию.
3. Я установил Pyhive, используя sudo, поэтому я изменил разрешение по этой ссылке, но все еще получил ту же проблему.
1 ответ
Файл, который вы запускаете, называется pyhive.py
,
Когда вы делаете
from pyhive import hive
внутри вашего pyhive.py
потом попробует импортировать hive
из вашего модуля, а не из pyhive
библиотека.
Назовите файл, который вы запускаете, как-нибудь еще, и избегайте использования имен существующих модулей / библиотек.
Из документов:
Когда импортируется модуль с именем spam, интерпретатор сначала ищет встроенный модуль с таким именем. Если он не найден, он ищет файл с именем spam.py в списке каталогов, заданных переменной sys.path. sys.path инициализируется из этих мест:
- каталог, содержащий входной скрипт (или текущий каталог).
- PYTHONPATH (список имен каталогов с тем же синтаксисом, что и для переменной оболочки PATH).
- зависящее от установки значение по умолчанию.