如何使用pyhive

时间:2017-05-17 14:20:49

标签: python hadoop pyhive

使用此链接尝试连接到远程配置单元。以下是使用的代码。收到的错误消息也在下面给出

How to Access Hive via 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)]

成功连接的其他要求是什么?我可以直接连接到服务器(使用putty)并运行配置单元。但是当从另一台服务器X尝试时,我得到了这个错误。我也可以从服务器X ping配置蜂巢服务器。

端口号可能是问题吗?如何查看正确的端口号?

如下面的答案所述,我试图启动hiveserver2。但命令似乎没有用。任何帮助都非常感谢。

当我从hive shell执行查询时,我在日志中看到的端口是 8088 。想知道这是否应该是端口而不是 10000 (两者都无法正常工作)

4 个答案:

答案 0 :(得分:2)

必须在远程Hive主机中启动

HiveServer2进程。 10000是默认端口号。

使用此命令启动HiveServer2。

$HIVE_HOME/bin/hiveserver2 

答案 1 :(得分:2)

无法使用pyhive使其正常工作。不得不使用paramiko insted 下面是示例代码

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))"')

答案 2 :(得分:1)

请尝试以下代码使用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())

答案 3 :(得分:0)

为使PyHive正常工作,Hive Server 2.0应该使用传输模式作为“二进制”运行。如果它与传输一起运行(如Http),请将其更改为“ binary”。