如何使用Impyla和Kerberos连接到Apache Hadoop

时间:2019-01-24 13:32:39

标签: python kerberos impyla

首先,我也读了this question(因为它似乎很像)。

我的问题是我还尝试连接到我们的Apache Hadoop系统,该系统现在已由Kerberos保护。我使用impyla模块来实现此目的。在Kerberos系统上安装Kerberos之前,此方法运行良好。现在,我在Internet上尝试了不同的解决方案,但似乎没有任何效果,但是我不得不承认,我以前从未使用过Kerberos。

这是我使用的代码:

    conn = connect (host = host, 
                    port = port, 
                    auth_mechanism='GSSAPI', 
                    kerberos_service_name='impala')
    db_cursor = conn.cursor()
    db_cursor.execute ('SHOW DATABASES')
    results = db_cursor.fetchall()
    db_names = [print(x[0]) for x in results]

(主机和端口作为变量传递)

目前的错误是: “没有名为thrift_sasl的模块”

在该错误消息上使用Google并不能使我找到有用的东西,但是效果很差。有人说需要安装“ pyKerberos”模块,但是我不确定这是否可以解决问题。

有什么我忘了吗?我也有Kerberos主体和密码,并使用“ MIT Kerberos Ticket Manager”进行管理。但是也许我还必须以某种方式在代码中提供信息?

希望有人可以帮助我,因为我被困在这里。 :-)

2 个答案:

答案 0 :(得分:1)

我遇到了同样的问题,但是我通过安装正确版本的必需库来解决它。

使用pip在python库下方安装:

six==1.12.0
bit_array==0.1.0
thrift==0.9.3
thrift_sasl==0.2.1
sasl==0.2.1
impyla==0.13.8

下面的代码与python版本2.73.4一起正常工作。

import ssl
from impala.dbapi import connect
import os
os.system("kinit")
conn = connect(host='hostname.io', port=21050, use_ssl=True, database='default', user='urusername', kerberos_service_name='impala', auth_mechanism = 'GSSAPI')
cur = conn.cursor()
cur.execute('SHOW DATABASES;')
result=cur.fetchall()
for data in result:
    print (data) 

答案 1 :(得分:0)

经过漫长而容易出错的方式,我终于找到了解决方案。 我没有使用库“ impyla”,而是使用了另一种方法: 我安装了cloudera ODBC驱动程序,并在ODBC数据源管理员工具中配置了新连接。我还提供了.keytab文件以进行身份​​验证(以及用户名和密码等)。 然后,我只使用了如下所示的Python库“ pyodbc”:

import pyodbc
import pandas


pyodbc.autocommit=True
conn = pyodbc.connect("DSN=NAMEOFYOURDSN", autocommit=True)
cursor = conn.cursor()
cursor.execute('SHOW DATABASES')
with pandas.option_context('display.max_rows', None, 'display.max_columns', None):    
     print(df)

这很好用,我可以开始进一步处理了。