python连接hive kerberos_【华为云技术分享】使用Python连接Kerberos的Presto

Python连接presto开源提供了以下两个库可以使用

接下来就来分别实践一下,这两种客户端。

环境准备

1.       创建一台Ubuntu的ECS,VPC选择和MRS集群一致

2.       下载安装apt-get,pip3,python3

3.       安装MRS客户端

遇到的报错:Error: Network time protocol(NTP) not running. Please start NTP first.

解决方案:sudo /etc/init.d/ntp restart

4.       在MRS Manager页面中系统设置>用户管理中创建的用户,并下载认证凭据,解压后,将krb5.conf和user.keytab放到/root目录下

5.       获取SSL认证凭据

将集群中的/opt/Bigdata/MRS_1.8.10/install/FusionInsight-ldapclient-2.5.0/ldapclient/local/cert/cacert.pem文件拷贝到Ubuntu的ECS的/root目录下

连接方式一:presto-python-client

安装依赖安装pandas:

pip3 install pandas

安装requests-kerberos:

sudo apt-get install python3-dev

sudo apt install krb5-multidev

pip3 install requests_kerberos

安装presto-python-client

pip3 install presto-python-client

2.编写代码

import prestodb

import os

from pandas import DataFrame

os.system('kinit -kt {}/user.keytab {}'.format('/root','sxy'))

conn=prestodb.dbapi.connect(

host='192.168.0.194', #Presto Coordinator的ip

port=7521,

user='sxy',

catalog='tpcds',

schema='sf1',

http_scheme='https',

auth=prestodb.auth.KerberosAuthentication(config='/root/krb5.conf',service_name='presto',principal='sxy',mutual_authentication=False,ca_bundle='/root/cacert.pem')

)

cur = conn.cursor()

cur.execute('select c_first_name, c_last_name from customer limit 5')

df = DataFrame(cur.fetchall())

df.columns = ['First_Name', 'Last_Name']

print(df)

3.  运行结果

连接方式二:PyHive

安装依赖安装requests-kerberos:

sudo apt-get install python3-dev

sudo apt install krb5-multidev

pip3 install requests_kerberos

安装pyhive

pip3 install pyhive2. 编写代码

2.   编写代码

from pyhive import presto

presto_cli = presto.connect(

host='192.168.0.194',

port=7521,

username='sxy',

password='XXXX', # 创建用户时设置的密码

catalog='tpcds',

schema='sf1',

poll_interval=1,

source='pyhive',

session_props=None,

protocol='https',

requests_session=None,

requests_kwargs={

'verify':'/root/cacert.pem'

},

KerberosRemoteServiceName='presto',

KerberosPrincipal='sxy',

KerberosConfigPath='/root/krb5.conf',

KerberosKeytabPath='/root/user.keytab',

KerberosCredentialCachePath=None, KerberosUseCanonicalHostname=None

)

c = presto_cli.cursor()

c.execute('show tables')

for i in c.fetchall():

print(i)

3.  运行结果

那些踩的坑

用EulerOS镜像装requests-kerberos遇到一些XXX.h文件无法找到的问题

没有找到EulerOS下替代sudo apt-get install python3-dev,修复该问题的方法。转而使用Ubuntu。

SSL认证失败

出现以下报错的原因pem文件配置不正确

401 Unauthorized报错

原因:Kerberos的四个相关参数(user, principal,krb5,keytab)配置错误。

校验参数的方法:用presto_cli工具登录客户端后执行show tables,若成功则,参数正确。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值