在Windows中使用odbc访问kerberos认证的impala
一直使用mac或者wsl来解决访问带有kerberos的impala服务,但WSL毕竟也稍微麻烦了一点,就想着试下能不能再windows解决这个问题。一直使用的是jdbc的impala,看到官网有odbc的,于是就想着试一下,看看能不能解决。
下载odbc impala驱动
打开cloudera
官网->下载
,产品下载 | Cloudera (clouderacn.cn),找到数据库驱动程序
,点击Impala ODBC 驱动程序下载
打开ODBC Connector下载页面,Download Impala ODBC Connector 2.6.17 (cloudera.com)。选择对应的操作系统版本,下载即可。
安装Cloudera Impala ODBC驱动
双击ClouderaImpalaODBC64.msi
,除了选择路径,其他无脑下一步。
配置Microsoft ODBC数据源管理程序
在powertoys
中搜索ODBC 数据源(64 位)
打开ODBC 数据源(64 位)
,在系统DSN
中找到了默认添加的一条数据源
配置
点击配置,根据自己实际情况进行配置
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; |
点击Test
按钮,经过短暂的卡顿以后,提示如下表示成功:
编写代码
1 | import pyodbc |
此时控制台便会打印该库里所有的表名,完美解决Windows下访问带有Kerberos认证的impala失败的问题。
补充
其实在Linux或者Mac中也可以使用ODBC来编写代码。
以RHEL、CentOS为例
安装
1 | yum –nogpgcheck localinstall ClouderaImpalaODBC-2.6.10.1010-1.x86_64.rpm |
Cloudera ODBC Driver for Impala
安装在 /opt/cloudera/impalaodbc
目录中。
配置
在非 Windows 计算机上创建数据源名称。在 /opt/cloudera/impalaodbc/lib/64/cloudera.impalaodbc.ini
添加以下内容:
1 | [Driver] |
测试impala连接
1 | $ kinit your-kerberos-userid |
现在就可以运行python脚本来测试了
1 | import pyodbc |
同样,autocommit
必须为True
。否则会打印一个错误 (‘HYC00’, ‘[HYC00] [Cloudera][ODBC] (11470) Transactions are not supported