1. ホーム
  2. python

[解決済み] pyhiveを使用してリモートハイブにアクセスする方法

2022-02-17 01:34:04

質問

このリンクを使用して、リモートハイブへの接続を試みました。以下は、使用したコードです。また、受け取ったエラーメッセージは以下の通りです。

PythonでHiveにアクセスするには?

コード

   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)]

その他、接続に成功するための条件はありますか?私は直接サーバーに接続し(puttyを使用)、ハイブを実行することができます。しかし、別のサーバーXから試したところ、このエラーが発生しました。また、サーバーXからハイブサーバーにpingを打つことができます。

ポート番号に問題があるのでしょうか?正しいポート番号を確認するにはどうすればよいですか?

以下の回答で説明されているように、私はhiveserver2を起動しようとしました。しかし、コマンドは動作しないようです。どんな助けでも本当に感謝します。

また、ハイブシェルからクエリを実行したときにログに表示されるポートが 8088 の代わりに、このポートを使用する必要があるのでしょうか? 10000 (どちらもうまくいきませんでした)

解決方法は?

を使用して動作させることができませんでした。 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))"')