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

问题描述 投票:0回答:2

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

我的问题是,我还尝试连接到现在已由Kerberos保护的Apache Hadoop系统。我使用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”进行管理,但也许我还必须以某种方式在代码中提供信息?

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

python kerberos impyla
2个回答
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) 

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)

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

© www.soinside.com 2019 - 2024. All rights reserved.