如何使用pyhive访问远程配置单元
How to access remote hive using pyhive
使用此 link 尝试连接到远程配置单元。下面是使用的代码。收到的错误消息也在下面给出
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)]
成功连接的其他要求是什么?我能够直接连接到服务器(使用腻子)和 运行 配置单元。但是当从另一台服务器 X 尝试时,我得到了这个错误。我也可以从服务器 X ping 蜂巢服务器。
端口号可能是问题所在吗?我如何检查正确的端口号?
正如下面的答案中所讨论的,我尝试启动 hiveserver2。但该命令似乎不起作用。非常感谢任何帮助。
另外,当我从配置单元 shell 执行查询时,我在日志中看到的端口是 8088。想知道这是否应该是端口而不是 10000(两者都不起作用)
HiveServer2
进程必须在您的远程 Hive 主机中启动。 10000
是默认端口号。
使用此命令启动 HiveServer2。
$HIVE_HOME/bin/hiveserver2
无法使用 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))"')
请尝试使用以下代码使用 pyhive 访问远程配置单元 table:
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())
为了让 PyHive 正常工作,Hive Server 2.0 应该 运行 使用“二进制”传输模式。如果是 运行 transport as Http 将其更改为 "binary".
使用此 link 尝试连接到远程配置单元。下面是使用的代码。收到的错误消息也在下面给出
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)]
成功连接的其他要求是什么?我能够直接连接到服务器(使用腻子)和 运行 配置单元。但是当从另一台服务器 X 尝试时,我得到了这个错误。我也可以从服务器 X ping 蜂巢服务器。
端口号可能是问题所在吗?我如何检查正确的端口号?
正如下面的答案中所讨论的,我尝试启动 hiveserver2。但该命令似乎不起作用。非常感谢任何帮助。
另外,当我从配置单元 shell 执行查询时,我在日志中看到的端口是 8088。想知道这是否应该是端口而不是 10000(两者都不起作用)
HiveServer2
进程必须在您的远程 Hive 主机中启动。 10000
是默认端口号。
使用此命令启动 HiveServer2。
$HIVE_HOME/bin/hiveserver2
无法使用 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))"')
请尝试使用以下代码使用 pyhive 访问远程配置单元 table:
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())
为了让 PyHive 正常工作,Hive Server 2.0 应该 运行 使用“二进制”传输模式。如果是 运行 transport as Http 将其更改为 "binary".