Как получить доступ к удаленному улью с помощью 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)]

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

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

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

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

5 ответов

Решение

Не могу заставить его работать, используя 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))"')

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

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

$HIVE_HOME/bin/hiveserver2 

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

Сначала hive.server2.transport.mode должен быть установлен в двоичный режим.

затем используйте следующий код

      from pyhive import hive

host_name = "10.3.141.44"
port = 10000
database="ncc"


def hiveconnection(host_name, port, database):
    conn = hive.Connection(host=host_name, port=port,
                           database=database, auth='NOSASL')
    cur = conn.cursor()
    cur.execute('select * from registry')
    result = cur.fetchall()
    return result
output = hiveconnection(host_name, port, database)
print(output)

Пожалуйста, попробуйте следующий код для доступа к таблице удаленного куста с помощью 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())
Другие вопросы по тегам