念念不忘
必会回响

在Windows中使用odbc访问kerberos认证的impala

一直使用mac或者wsl来解决访问带有kerberos的impala服务,但WSL毕竟也稍微麻烦了一点,就想着试下能不能再windows解决这个问题。一直使用的是jdbc的impala,看到官网有odbc的,于是就想着试一下,看看能不能解决。

1. 下载odbc impala驱动

打开cloudera官网->下载产品下载 | Cloudera (clouderacn.cn),找到数据库驱动程序,点击Impala ODBC 驱动程序下载打开ODBC Connector下载页面,Download Impala ODBC Connector 2.6.17 (cloudera.com)。选择对应的操作系统版本,下载即可。

2. 安装Cloudera Impala ODBC驱动

双击ClouderaImpalaODBC64.msi,除了选择路径,其他无脑下一步。

3. 配置Microsoft ODBC数据源管理程序

powertoys中搜索ODBC 数据源(64 位)

打开ODBC 数据源(64 位),在系统DSN中找到了默认添加的一条数据源

3.1 配置

点击配置,根据自己实际情况进行配置

# IMPALA JDBC URL jdbc:impala://impala.proxy.xxx.com:21050;AuthMech=1;KrbRealm=XXX.COM;KrbHostFQDN=impala.proxy.xxx.com;KrbServiceName=impala;REQUEST_POOL=test;mem_limit=2gb;
Data Source Name : prod_impala
Description      : 描述信息随便填
Host             : 输入你得impala地址即可,例如:impala.proxy.xxx.com
Port             : impala的端口,默认就是21050
DataBase         : 数据库名,例如 test
# 在Authentication 中设置认证方式
Mechanism:       : 认证方式,选择kerberos
Realm            : 填写realm信息,例如 XXX.COM
Host FQDN        : 填写KrbHostFQDN信息,一般都是和host一直,所以默认值 _host 即可
Service Name     : kerberos的服务名 默认是impala
# 勾选Use keytab ,点击Keytab Options设置keytab的路径
Username         : 输入给你分配的kerberos的用户名,例如:test
# 其他的就不用管了

点击Test按钮,经过短暂的卡顿以后,提示如下表示成功:

4. 编写代码

import pyodbc

def test():
    pyodbc.autocommit = True
    # DSN填写刚才配置的名称,autocommit一定设置为True,不然会报错
    con = pyodbc.connect('DSN=prod_impala;Database=test', autocommit=True)
    cursor = con.cursor()
    cursor.execute("show tables;")

    datas = cursor.fetchall()
    print(datas)
    cursor.close()
    con.close()

if __name__ == '__main__':
    test()

此时控制台便会打印该库里所有的表名,完美解决Windows下访问带有Kerberos认证的impala失败的问题。

5. 补充

其实在Linux或者Mac中也可以使用ODBC来编写代码。

以RHEL、CentOS为例

5.1. 安装

yum –nogpgcheck localinstall ClouderaImpalaODBC-2.6.10.1010-1.x86_64.rpm

Cloudera ODBC Driver for Impala 安装在 /opt/cloudera/impalaodbc 目录中。

5.2. 配置

在非 Windows 计算机上创建数据源名称。在 /opt/cloudera/impalaodbc/lib/64/cloudera.impalaodbc.ini添加以下内容:

[Driver]
ErrorMessagesPath=/opt/cloudera/impalaodbc/ErrorMessages/
LogLevel=0
LogPath=

Driver=/opt/cloudera/impalaodbc/lib/64/libclouderaimpalaodbc64.so
Host=impala.proxy.xxx.com
Port=21050
AuthMech=1
# Cloudera ODBC Driver for Impala 64-bit
KrbRealm=XXX.COM
# Cloudera ODBC Driver for Impala 64-bit
KrbFQDN=impala.proxy.xxx.com
KrbServiceName=impala

In /etc/odbc.ini add below lines:

[ODBC Data Sources]
# Cloudera ODBC Driver for Impala 64-bit
your-odbc-dsn=prod_impala 

[your-odbc-dsn]
Driver=/opt/cloudera/impalaodbc/lib/64/libclouderaimpalaodbc64.so

5.3. 测试impala连接

$ kinit your-kerberos-userid
# isql -v your-odbc-dsn

+---------------------------------------+
| Connected!                             |
|                                        |
| sql-statement                          |
| help [tablename]                       |
| quit                                   |
|                                        |
+---------------------------------------+
SQL>

This shows that the connection to impala is successful.

现在就可以运行python脚本来测试了

import pyodbc
conn = pyodbc.connect('DSN=your-odbc-dsn',autocommit=True)

crsr = conn.cursor()
crsr.execute('select * from mydb.mytable limit 5;')
print(crsr.fetchall())

同样,autocommit必须为True。否则会打印一个错误 (‘HYC00’, ‘[HYC00] [Cloudera][ODBC] (11470) Transactions are not supported

赞(5) 打赏
未经允许不得转载:堆上小栈 » 在Windows中使用odbc访问kerberos认证的impala

评论 抢沙发

觉得文章有用就打赏一下文章作者

非常感谢你的打赏,我们将继续提供更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫

微信扫一扫

登录

找回密码

注册