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

  1. 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).
  • зависящее от установки значение по умолчанию.
Другие вопросы по тегам