【华为云技术分享】使用Python连接Kerberos的Presto
Python连接presto开源提供了以下两个库可以使用
presto-python-client:https://github.com/prestodb/presto-python-client
pyhive:https://github.com/dropbox/PyHive
接下来就来分别实践一下,这两种客户端。
环境准备
1. 创建一台Ubuntu的ECS,VPC选择和MRS集群一致
2. 下载安装apt-get,pip3,python3
3. 安装MRS客户端
参考https://support.huaweicloud.com/usermanual-mrs/mrs_01_0091.html
遇到的报错: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. 编写代码
[code]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. 编写代码
[code]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,若成功则,参数正确。
点击这里,了解更多精彩内容
- 【华为云技术分享】使用pdb调试python代码的方法
- 【华为云技术分享】【玩转Atlas200DK系列】应用开发之 交叉编译第三方库并在工程中使用(jsoncpp)
- 【华为云技术分享】【Python算法】分类与预测——Python随机森林
- 【华为云技术分享】计算python程序执行时间
- 分享一个连接,python扩展包下载地址分享包括numpy,scipy等,解决了win8系统不能使用这些扩展包的问题!
- 【华为云技术分享】如何使用pyCharm与ModelArts公有云服务联动开发,快速且充分地利用云端GPU计算资源
- 【华为云技术分享】玩转小熊派BearPi(一)使用STM32CubeMX + HAL点亮一个LED
- 【华为云技术分享】使用CloudIDE快速体验基于华为云ModelArts SDK的AI开发
- 【华为云技术分享】使用keil5打开GD32F450i的MDK项目出现的问题以及J-Link无法烧录程序对应的解决方案
- 【华为云技术分享】使用sqoop导入mysql数据到hive中
- 【华为云技术分享】云图说 | Dubbo框架应用也可以使用Istio服务网格
- 【华为云技术分享】【Python算法】分类与预测——支持向量机
- 分享一个python下func module的使用脚本
- 分享 silverlight oob模式下, pc连接wince winmoble PDA 手持智能终端 ,复制文件的类,和使用方法
- python使用mysqldb连接数据库操作方法示例详解
- Python中使用MySQLdb连接MySQL 分类: database 2014-01-29 15:37 358人阅读 评论(0) 收藏
- python 使用pymssql连接sql server数据库
- python 使用pymssql连接sql server数据库
- [技术分享]使用 UAG 发布 RemoteAPP
- python使用mysqldb连接数据库操作方法示例详解