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或者机器配置导致的吧,后面放在和机器同网络环境的服务器运行是没问题的

  

posted @ 2022-02-11 17:45  t_zcx  阅读(690)  评论(0编辑  收藏  举报