Как получить доступ к удаленному улью с помощью pyhive

Использовал эту ссылку, чтобы попытаться подключиться к удаленному улью. Ниже приведен используемый код. Полученное сообщение об ошибке также приведено ниже.

Как получить доступ к Hive через Python?

Код

   from pyhive import hive
    conn = hive.Connection(host="10.111.22.11", port=10000, username="user1" ,database="default")

Сообщение об ошибке

Could not connect to any of [('10.111.22.11', 10000)]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/opt/anaconda3/lib/python3.6/site-packages/pyhive/hive.py", line 131, in __init__
    self._transport.open()
  File "/opt/anaconda3/lib/python3.6/site-packages/thrift_sasl/__init__.py", line 61, in open
    self._trans.open()
  File "/opt/anaconda3/lib/python3.6/site-packages/thrift/transport/TSocket.py",line 113, in open
    raise TTransportException(TTransportException.NOT_OPEN, msg)
thrift.transport.TTransport.TTransportException: Could not connect to any of [('10.111.22.11', 10000)]

Какие еще требования для успешного подключения? Я могу подключиться к серверу напрямую (используя замазку) и запустить hive. Но при попытке с другого сервера X я получаю эту ошибку. Также я могу проверить связь с сервером улья с сервера X.

Может быть проблема с номером порта? Как мне проверить правильный номер порта?

Как обсуждалось в ответе ниже, я попытался запустить hiveserver2. Но команда не работает. Любая помощь действительно приветствуется.

Также порт, который я вижу в журнале, когда выполняю запрос из оболочки улья, - 8088. интересно, должен ли это быть порт вместо 10000 (оба все равно не работали)


person kten    schedule 17.05.2017    source источник


Ответы (4)


Не удалось заставить его работать с pyhive. Пришлось использовать paramiko, ниже приведен пример кода

import os
import paramiko
import time 

ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.load_host_keys(os.path.expanduser(os.path.join("~", ".ssh", "known_hosts")))
ssh.connect('1.1.1.1', username='uid', password='pwd')
sshin, sshout, ssherr= ssh.exec_command('hive -e "create table test(key varchar(10),keyval varchar(200))"')
person kten    schedule 05.07.2017

HiveServer2 процесс должен быть запущен на удаленном хосте Hive. 10000 - это номер порта по умолчанию.

Используйте эту команду для запуска HiveServer2.

$HIVE_HOME/bin/hiveserver2 
person franklinsijo    schedule 17.05.2017
comment
Сервер-улей - это большая производственная система. Так что я предполагаю, что он работает всегда. Подскажите, как проверить, работает ли? - person kten; 18.05.2017
comment
Вы можете попробовать telnet-порт 10000. telnet 10.111.22.11 10000 - person franklinsijo; 18.05.2017
comment
с того же сервера telnet выдает ошибку отказа в соединении, но в то же время я могу запустить куст - person kten; 18.05.2017
comment
Вы сможете запускать запросы через оболочку улья без запуска сервера улья. Но для использования pyhive необходимо запустить hiveserver2. Попробуйте запустить его с помощью команды в ответе. - person franklinsijo; 18.05.2017
comment
жаль это говорить. но я не могу понять этот путь. $ HIVE_HOME не разрешается - person kten; 18.05.2017
comment
он не возвращает hiveserver2 в (разные пути). Так он не настроен для удаленного подключения? - person kten; 18.05.2017
comment
Нет, вы должны запустить эту команду на своем удаленном узле улья. - person franklinsijo; 18.05.2017
comment
По-прежнему безуспешно. попробовал, какую команду на самом удаленном хосте, где находится улей. Таким образом, он по-прежнему выглядит не настроенным для удаленных подключений. Сейчас я пытаюсь использовать ssh-клиент paramiko. где я могу вызвать команду улья. но недостатком является то, что каждый вызов является отдельным сеансом, что не позволяет мне использовать только что созданную таблицу. - person kten; 22.05.2017
comment
Я знаю, что уже очень давно использование paramiko вместо pyhive - ужасный выбор. Если у вас есть hive исполняемый файл на вашем хосте, вы также сможете запустить hiveserver2. Попробуйте hive --service hiveserver2 на своем удаленном хосте. - person franklinsijo; 13.06.2017

Пожалуйста, попробуйте следующий код для доступа к удаленной таблице улья с помощью pyhive:

from pyhive import hive
import pandas as pd

#Create Hive connection 
conn = hive.Connection(host="10.111.22.11", port=10000, username="user1")

# Read Hive table and Create pandas dataframe
df = pd.read_sql("SELECT * FROM db_Name.table_Name limit 10", conn)
print(df.head())
person user07    schedule 15.08.2017
comment
доснт работа. получение ошибки thriftpy.transport.TTransportException: TTransportException(type=1, message="Could not start SASL: b'Error in sasl_client_start (-4) SASL(-4): no mechanism available: No worthy mechs found - person sjd; 14.02.2018
comment
@sjd: попробуйте также установить пакеты thrift и thrift_sasl с помощью pip. - person vuvu; 10.01.2019

Чтобы PyHive работал, Hive Server 2.0 должен работать с использованием транспортного режима как «двоичного». Если он работает с транспортом как Http, измените его на «двоичный».

person Arnab Biswas    schedule 18.09.2019