python通过kerberos连接impala操作hive

一、python2版本

1. docker基础镜像

tobyhferguson/impyla_tester

2. 安装相关包及配置

2.1 安装包

参考python3.6.5基于kerberos认证的hive和hdfs连接调用

yum install libsasl2-dev
yum install gcc-c++ python-devel.x86_64 cyrus-sasl-devel.x86_64
yum install python-devel   
yum install krb5-devel
yum install python-krbV

pip install krbcontext==0.9
pip install thrift==0.9.3
pip install thrift-sasl==0.2.1
pip install impyla==0.14.1
pip install hdfs[kerberos]
pip install pykerberos==1.2.1

可能中间有些失败或pip升级的问题,再次安装就行了(比如使用yum安装包的时候明明安装了krb5-devel,使用pip安装包的时候还是遇到gssapi.h找不到的问题,重新安装krb5-devel)

2.2 配置krb5.conf

安装了kerberos相关的包,/etc下面有个krb5.conf文件,换成自己集群的krb5.conf文件

2.3 配置/etc/hosts

将主机和ip的映射信息加入/etc/hosts

最后使用docker commit生成镜像

3. 连接hive的示例代码:

from krbcontext import krbcontext
from impala.dbapi import connect

with krbcontext(using_keytab=True,
                principal='b_l.a.w/[email protected]',
                keytab_file='/root/l.a.w.keytab'):
    conn = connect(host='node5.sxx.txx',
                        port=21050,
                        database='xx_rz_demo',
                        auth_mechanism= 'GSSAPI',
                        kerberos_service_name='impala')

    query="show tables"
    cur = conn.cursor()
    cur.execute(query)
    res = cur.fetchall()
    print(res)

二、python3版本

1. docker基础镜像

docker pull ksatjp/py36centos:7

2. 安装相关包及配置

和上面的一样,但是pip换成pip3.6

3. 示例代码

同上,可能报错:

thriftpy.transport.TTransportException: TTransportException(type=1, message="Could not start SASL: b'Error in sasl_client_start (-4) SASL(-4): no mechanism available: No worthy mechs found'")

参考:Python连接hive报错Could not start SASL: Error in sasl_client_start (-4) SASL(-4): no mechanism available,安装sasl相关的包可解决:

yum install cyrus-sasl-plain cyrus-sasl-devel cyrus-sasl-gssapi  cyrus-sasl-md5

三、相关链接

  • python3.6.5基于kerberos认证的hive和hdfs连接调用
  • python3.6如何连接hive?
  • gssapi/gssapi.h: No such file or directory
  • python连接hive配置

你可能感兴趣的:(大数据)