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

Run impala query with remotely executed Python code using ODBC

我目前正在尝试设置 Python 能够对远程 Impala 服务器进行 impala 查询的代码。

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

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

我尝试按照 this guide 开始。

我通过设置 pyodbc 进行了试验:

Driver,Host,Port,Database,AuthMech=3,UseSASL=1,UID,PWD,SSL=1

在我的连接字符串中,但我总是以:

pyodbc.Error: ('HY000', '[HY000] [Cloudera][ImpalaODBC] (100) Error from the Impala Thrift API: No more data to read. (100) (SQLDriverConnect); [HY000] [Cloudera][ImpalaODBC] (100) Error from the Impala Thrift API: No more data to read. (100)')

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

有人可以阐明如何从本地 windows 用户 运行 查询到 kerberised Impala 服务器吗?需要设置哪些参数以及它们期望的值是什么?代码示例表示赞赏。我不在乎使用哪个库,尽管我似乎无法安装 thrift-sasl。请询问任何需要的额外信息,我会更新我的问题。

很明显,我可以从我之前配置的 ODBC driver/connection 中受益。 通过提供我在 ODBC 管理器工具中找到的 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()