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

2024-05-17 19:06:36 发布

您现在位置:Python中文网/ 问答频道 /正文

凯斯:我有一个云平台上的蜂巢。在配置单元上有一个数据库,我想从我的计算机上使用python客户机访问它。我读到一个类似的问题,但它使用pyhs2,我无法在远程服务器上安装它。这个SO问题也使用了节约,但我似乎也无法安装它。

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

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-proj/hdfsConnect/home/ashish/PyCharm-proj/hdfsConnect/Hive-connect/Hive-connect.py

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

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

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

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

谢谢


Tags: 代码truehomeconnect错误concursorpycharm
3条回答

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

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

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

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

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

另外,我更新了您提到的另一个问题,其中包含有关如何安装节俭库的信息。如果你有这个选择的话,我想这就是你要走的路。

这对我有效

oODBC = pyodbc.connect("DSN=Cloudera Hive DSN 64;", autocommit = True, ansi = True )

现在一切都很好。

确保您的DSN使用以下工具时一切正常:

isql -v "Cloudera Hive DSN 64" 

并用odbc.ini中使用的名称替换“Cloudera Hive DSN 64”

另外,目前我无法使用kerberos身份验证,除非我手工制作一个票证。Impala使用kerberos keytab文件工作顺利

有关如何让hive odbc处理keytab文件的任何帮助都将不胜感激。

也可以尝试此方法从配置单元服务器远程连接和获取数据: 使用ssh连接远程服务器,并使用cli命令从远程服务器访问数据: ssh -o UserKnownHostsFile=/dev/null -o ConnectTimeout=90 -o StrictHostKeyChecking=no shashanks@remote_host 'hive -e "select * from DB.testtable limit 5;" >/home/shashanks/testfile'

相关问题 更多 >