使用ODBC使用远程执行的Python代码运行impala查询

时间:2017-03-08 16:11:58

标签: python-2.7 hadoop odbc cloudera impala

我目前无法尝试设置Python代码,以便能够对远程Impala服务器执行impala查询。

在我的本地Windows上,我使用的是已设置的ODBC驱动程序,可以成功用于在Tableau中使用Impala检索数据。 我们使用的Hadoop环境是Kerberised。 要使用ODBC管理员进行成功的连接测试,我们需要SASL和受信任的.pem证书。

我已经尝试使用多个库进行连接,但我不确定如何设置连接属性以及我需要它。

我尝试按照this guide开始使用。

我通过设置{

来试验pyodbc
  

驱动程序,主机,端口,数据库,AuthMech = 3,UseSASL = 1,UID,PWD,SSL = 1

在我的连接字符串中,但我总是最终得到:

  

pyodbc.Error:('HY000','[HY000] [Cloudera] [ImpalaODBC](100)错误   来自Impala Thrift API:无需读取更多数据。 (100)   (的SQLDriverConnect); [HY000] [Cloudera] [ImpalaODBC](100)错误来自   Impala Thrift API:无需读取更多数据。 (100)')

我不确定如何设置证书,因此可能会导致此错误。 我也看了impyla,但我不确定如何在那里设置连接参数。

有人可以了解如何从本地Windows用户运行查询到kerberised Impala服务器吗?需要设置哪些参数以及他们期望的值?代码示例表示赞赏。我不关心使用哪个库,虽然我似乎无法安装thrift-sasl。请询问任何所需的其他信息,我将更新我的问题。

1 个答案:

答案 0 :(得分:2)

显然,我可以从我之前配置的ODBC驱动程序/连接中受益。 通过提供我在ODBC Administrator工具中找到的DSN,我可以解决我的问题。我最终使用了pyodbc。

import pyodbc

cfg = {'username':'...', ...}
connString = '''DSN={3};UID={0};PWD={1};Database={2}'''.format(cfg['username'],cfg['password'],cfg['database'],cfg['dsn'])
pyodbc.autocommit = True
conn = pyodbc.connect(connString, autocommit = True)
cursor = conn.cursor()