如何使用python客户端访问远程服务器上的配置单元

如何使用python客户端访问远程服务器上的配置单元,python,hadoop,hive,Python,Hadoop,Hive,案例:我在cloudera平台上安装了蜂箱。在配置单元上有一个数据库,我想使用python客户端从我的计算机访问它。我读到了一个类似的问题,但它使用的是pyhs2,我无法在远程服务器上安装。这个问题也使用了节俭,但我似乎也不能安装它 代码:在遵循文档之后,当我执行下面的程序时,它会给我一个错误 import pyodbc, sys, os pyodbc.autocommit=True con = pyodbc.connect("DSN=default",driver='SQLDriv

案例:我在cloudera平台上安装了蜂箱。在配置单元上有一个数据库,我想使用python客户端从我的计算机访问它。我读到了一个类似的问题,但它使用的是pyhs2,我无法在远程服务器上安装。这个问题也使用了节俭,但我似乎也不能安装它

代码:在遵循文档之后,当我执行下面的程序时,它会给我一个错误

import pyodbc, sys, os
   pyodbc.autocommit=True
   con = pyodbc.connect("DSN=default",driver='SQLDriverConnect',autocommit=True)  
   cursor = con.cursor()
   cursor.execute("select * from fb_mpsp")
错误:ssh://ashish@ServerIPAddress/home/ashish/anaconda/bin/python2.7-u/home/ashish/PyCharm\u proj/hdfsConnect/home/ashish/PyCharm\u proj/hdfsConnect/Hive\u connect/Hive\u connect.py

回溯(最近一次呼叫最后一次): 文件“/home/ashish/PyCharm_proj/hdfsConnect/home/ashish/PyCharm_proj/hdfsConnect/Hive_connect/Hive_connect.py”,中第5行 con=pyodbc.connect(“DSN=default”,driver='SQLDriverConnect',autocommit=True)

pyodbc.Error:('IM002'、'[IM002][unixODBC][Driver Manager]未找到数据源名称,并且未指定默认驱动程序(0)(SQLDriverConnect)'))

进程已完成,退出代码为1

请建议我如何解决这个问题?另外,我也不确定为什么在使用hadoop配置单元执行代码时必须将驱动程序指定为SQLDriverConnection


感谢如果您决定重新访问
pyhs2
请注意,它不需要安装在远程服务器上,而是安装在您的本地客户端上

如果继续使用
pyodbc
,则需要安装配置单元的ODBC驱动程序,您可以从中获得该驱动程序

您不需要在连接中指定驱动程序,它应该是DSN的一部分。创建DSN的细节取决于您的操作系统,但基本上您将使用管理工具->数据源(Windows)、安装ODBC并编辑
/Library/ODBC/ODBC.ini
(Mac)或编辑
/etc/ODBC.ini
(Linux)来创建DSN

从概念上讲,可以将DSN视为表示连接所有信息的规范—它将包含主机、端口和驱动程序信息。这样,在您的代码中,您就不必指定这些内容,并且可以在不更改代码的情况下切换有关数据库的详细信息

# Note only the DSN name specifies the connection
import pyodbc
conn = pyodbc.connect("DSN=Hive1") 
cursor = conn.cursor()
cursor.execute("select * from YYY")

或者,我已经更新了您提到的另一个问题,其中包含有关如何安装thrift库的信息。如果你有这个选择的话,我认为这是一个不错的选择。

如果你决定重新访问
pyhs2
请注意,它不需要安装在远程服务器上,而是安装在本地客户端上

如果继续使用
pyodbc
,则需要安装配置单元的ODBC驱动程序,您可以从中获得该驱动程序

您不需要在连接中指定驱动程序,它应该是DSN的一部分。创建DSN的细节取决于您的操作系统,但基本上您将使用管理工具->数据源(Windows)、安装ODBC并编辑
/Library/ODBC/ODBC.ini
(Mac)或编辑
/etc/ODBC.ini
(Linux)来创建DSN

从概念上讲,可以将DSN视为表示连接所有信息的规范—它将包含主机、端口和驱动程序信息。这样,在您的代码中,您就不必指定这些内容,并且可以在不更改代码的情况下切换有关数据库的详细信息

# Note only the DSN name specifies the connection
import pyodbc
conn = pyodbc.connect("DSN=Hive1") 
cursor = conn.cursor()
cursor.execute("select * from YYY")
或者,我已经更新了您提到的另一个问题,其中包含有关如何安装thrift库的信息。如果你有选择的话,我想这是一条路。

这对我来说很有效

oODBC = pyodbc.connect("DSN=Cloudera Hive DSN 64;", autocommit = True, ansi = True )
现在一切都很好

确保您的DSN可以使用以下各项:

isql -v "Cloudera Hive DSN 64" 
并将“Cloudera Hive DSN 64”替换为您在odbc.ini中使用的名称

另外,目前我不能使用kerberos身份验证,除非我手工制作票据。Impala使用kerberos密钥表文件可以顺利工作

非常感谢您对如何让hive odbc处理keytab文件提供的任何帮助。

这对我很有用

oODBC = pyodbc.connect("DSN=Cloudera Hive DSN 64;", autocommit = True, ansi = True )
现在一切都很好

确保您的DSN可以使用以下各项:

isql -v "Cloudera Hive DSN 64" 
并将“Cloudera Hive DSN 64”替换为您在odbc.ini中使用的名称

另外,目前我不能使用kerberos身份验证,除非我手工制作票据。Impala使用kerberos密钥表文件可以顺利工作


非常感谢您提供有关如何让hive odbc使用keytab文件的任何帮助。

也可以尝试此方法从hive服务器远程连接和获取数据: 使用ssh连接远程服务器,并发出cli命令从远程服务器访问数据:

ssh-o UserKnownHostsFile=/dev/null-o ConnectTimeout=90-o StrictHostKeyChecking=noshashanks@remote_host“hive-e”从DB.testtable limit 5中选择*;“>/home/shashashanks/testfile”

也可以尝试此方法从配置单元服务器远程连接和获取数据: 使用ssh连接远程服务器,并发出cli命令从远程服务器访问数据:

ssh-o UserKnownHostsFile=/dev/null-o ConnectTimeout=90-o StrictHostKeyChecking=noshashanks@remote_host“hive-e”从DB.testtable limit 5中选择*;“>/home/shashashanks/testfile”