Python连接需要Kerberos认证的Presto
目的:为了做数仓测试的自动化 所以需要查询hive的数据,如果直连hive那么查询会比较慢,presto特点是即席查询 相比直连hive快很多
首先先拿到认证文件和配置文件,因为使用Kerberos认证连接会需要
./krb5.conf
./username.keytab
prestokeystore-350.jks(因为使用的是python 所以要将jks文件转pem格式的)
1.先转p12类型
keytool -importkeystore -srckeystore prestokeystore-350.jks -destkeystore prestokeystore-350.p12 -srcstoretype jks -deststoretype pkcs12
2.再转pem
openssl pkcs12 -clcerts -nokeys -out prestokeystore-350.pem -in prestokeystore-350.p12
------
上代码:
# -*- coding: utf-8 -*- import pandas as pd from pyhive import presto presto_cli = presto.connect( host='ip', port=port, username='username', catalog='hive', schema='default', protocol='https', KerberosRemoteServiceName='presto', KerberosPrincipal='username/tjpm@EMREMR-1234', requests_kwargs={'verify': './prestokeystore-350.pem'}, KerberosConfigPath='./krb5.conf', KerberosKeytabPath='./username.keytab' ) c = presto_cli.cursor() c.execute('select count(id) from hive.default.order_info limt 1) rows = c.fetchall() print(rows) c.close()
遇到的问题:
1.虽然在机器上使用presto 写sql需要末尾加 ; 号,但是在代码里不需要
2.卡点最长的是python写好后,在本地连接一直是401 不能访问,但是java是可以连接,没有深入研究 可能是jks转pem或者机器配置导致的吧,后面放在和机器同网络环境的服务器运行是没问题的