从Python连接Hive远程服务器

时间:2016-03-12 14:08:10

标签: python hadoop hive

我无法通过我的python脚本连接到远程服务器上运行的配置单元 我正在使用相同的脚本(当然,使用不同的服务器详细信息)连接到我的localhost&上运行的配置单元。能够连接。

我从命令行使用命令在本地主机上启动服务器:

hive —service hiveserver2

启动服务器并运行python脚本

连接到在本地主机上运行的Hive的脚本:

import pyhs2    
conn = pyhs2.connect(host='localhost', port=10000, authMechanism='PLAIN', user='hive', password ='', database='default')
    with conn.cursor() as cur:
            cur.execute("show databases")
            for i in cur.fetch():
                print i  

使用上面的代码,我可以在本地主机上访问db @ Hive。

我正在使用下面的代码连接到远程服务器,这里我 在命令行上执行任何操作来启动远程服务器。

连接到远程服务器上运行的Hive的脚本:

conn = pyhs2.connect(host='<my remote server Ip>', port=<port no>, authMechanism='PLAIN', user='<usernameToConnectToRemoteServer>', password ="<remoteServerPassword>"  database='default')
with conn.cursor() as cur:
        cur.execute("show databases")
        for i in cur.fetch():
            print i

这会给我一条消息:

  

thrift.transport.TTransport.TTransportException:TSocket读取0个字节。

我试过google&amp;尽可能多地找到解决方案,但我看到的只是连接本地主机的示例。请帮我解决这个问题。

1 个答案:

答案 0 :(得分:1)

尝试使用SSH连接远程计算机,然后连接到hive,如下所示 -

import paramiko
import traceback

def hive_query_executor():
dns_name = ''
conn_obj = paramiko.SSHClient()
conn_obj.set_missing_host_key_policy(paramiko.AutoAddPolicy())
try:
    conn_obj.connect(dns_name, username="hadoop",
                     key_filename='')# or password

    Hive_query="select * from abc limit 10;"
    query_execute_command = 'ihive -e "' + impala_query + '"'
    std_in, std_out, std_err = conn_obj.exec_command(query_execute_command)

    conn_obj.close()

except:
    print "Error :" + str(traceback.format_exc())
    exit(0)


hive_query_executor()