0

我正在尝试使用以下代码连接到 hdfs 并执行一些与文件相关的操作。请注意,我正在尝试从安装了 python3.6 的 Centos7 环境连接 Cloudera HDFS 实例。

import io 
from csv import reader
from krbcontext import krbcontext
from hdfs.ext.kerberos import KerberosClient


    
def getKerberosClient(host, port, root):
    
    url = 'http://{host}:{port}/'.format(host=host, port=port)
    client = KerberosClient(url, root=root)
    return client

def main():
    try:
        krb = krbcontext(using_keytab=True,principal='svcid213@AMER.SOMEORG.COM',keytab_file="/nfs-hdfs/kerberos/svcid213_AMER.SOMEORG.COM.keytab")
        print(F'kerberos authentication successful {krb}')
        kerberos_client = getKerberosClient('deltanileuat01.amer.someorg.com', 14000, "/")
        print(F'kerberos_client {kerberos_client}')
        result = kerberos_client.status("/")
        print(F"Output ============\n {result} \n =========================")
    except Exception as e:
        print(F"Detailed error is : {e} ")
   
if __name__ == '__main__':
    main()

我在安装了 python3.6 的 centos-7 环境中运行它[PS:没有安装 hdfs 客户端]。
在我执行代码之前,我已经完成了 pip install 如下

pip3.6 install kerberos
pip3.6 install requests-kerberos
pip3.6 install hdfs

在执行我得到如下

kerberos authentication successful <krbcontext.context.krbContext object at 0x7f1f7269c208>
kerberos_client <KerberosClient(url='http://deltanileuat01.amer.someorg.com:14000/')>
Detailed error is : Authentication failure. Check your credentials.

我可能在这里缺少一些配置。这个 keytab 可以很好地与 JAVA 应用程序连接到 hdfs。使用 python 它显示此错误。kinit如果 a) HDFS 客户端需要在执行环境中配置或 b)是需要做的事情,请告知执行上述代码。请注意,我们使用服务 id 通过 keytab 文件连接到 hdfs。

4

1 回答 1

0

通过使用 Service-ID 和 keytab 文件执行 kinit 解决了上述问题。然后代码执行一切正常

于 2020-07-24T05:33:07.997 回答