数据库开发实战教程:使用Python连接Kerberos的Presto
【摘要】本文将为大家带来Python连接presto开源的两个实践案例。
Python连接presto开源提供了以下两个库可以使用
presto-python-client:https://github.com/prestodb/presto-python-client
pyhive:https://github.com/dropbox/PyHive
接下来就来分别实践一下,这两种客户端。
环境准备
- 创建一台Ubuntu的ECS,VPC选择和MRS集群一致
- 下载安装apt-get,pip3,python3
- 安装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
(1)安装依赖
- 安装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
(1)安装依赖
- 安装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。
2. SSL认证失败

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

原因:Kerberos的四个相关参数(user, principal,krb5,keytab)配置错误。
校验参数的方法:用presto_cli工具登录客户端后执行show tables,若成功则,参数正确。

数据库开发实战教程:使用Python连接Kerberos的Presto的更多相关文章
- 【Python实战】使用Python连接Teradata数据库???未完成
1.安装Python 方法详见:[Python 05]Python开发环境搭建 2.安装Teradata客户端ODBC驱动 安装包地址:TTU下载地址 (1)安装TeraGSS和tdicu(ODBC依 ...
- asp.net mvc+jquery easyui开发实战教程之网站后台管理系统开发4- 后台模板html页面创建
上一篇教程<asp.net mvc+jquery easyui开发实战教程之网站后台管理系统开发3-登录模块开发>完成了本项目的登录模块,登录后就需要进入后台管理首页了,需要准备一个后台模 ...
- asp.net mvc+jquery easyui开发实战教程之网站后台管理系统开发2-Model层建立
上篇(asp.net mvc+jquery easyui开发实战教程之网站后台管理系统开发1-准备工作)文章讲解了开发过程中的准备工作,主要创建了项目数据库及项目,本文主要讲解项目M层的实现,M层这里 ...
- 微信小程序-云开发实战教程
微信小程序-云开发实战教程 云函数,云存储,云数据库,云调用 https://developers.weixin.qq.com/miniprogram/dev/wxcloud/basis/gettin ...
- Swift游戏开发实战教程(霸内部信息大学)
Swift游戏开发实战教程(大学霸内部资料) 试读下载地址:http://pan.baidu.com/s/1sj7DvQH 介绍:本教程是国内第一本Swift游戏开发专向资料. 本教程具体解说记忆配对 ...
- AndoridSQLite数据库开发基础教程(10)
AndoridSQLite数据库开发基础教程(10) 添加触发器 触发器(TRIGGER)是由事件来触发某个操作.这些事件包括INSERT.DELETE.UPDATE和UPDATE OF.当数据库系统 ...
- AndoridSQLite数据库开发基础教程(9)
AndoridSQLite数据库开发基础教程(9) 添加视图 视图是从一个或几个基本表(或视图)中导出的虚拟的表.通过视图可以看到表的内容.下面为数据库添加视图,操作步骤如下: (1)打开的数据库,单 ...
- AndoridSQLite数据库开发基础教程(8)
AndoridSQLite数据库开发基础教程(8) 添加索引 索引是一种通过预先排序和对表的一个或多个列构建索引表来优化数据库查找的手段.下面为表添加索引,操作步骤如下: (1)在打开的数据库中,单击 ...
- AndoridSQLite数据库开发基础教程(7)
AndoridSQLite数据库开发基础教程(7) 为空表添加数据 开发者可以单击Data按钮,看到Students表中是没有数据的,创建好的Students表是一个空表.如图1.15所示.如果开发者 ...
- AndoridSQLite数据库开发基础教程(6)
AndoridSQLite数据库开发基础教程(6) 为数据库添加添加空表 如果开发者想要往数据库中添加表和列,操作步骤如下: (1)在打开的数据库中,单击左下方的“+”按钮,弹出Table Edito ...
随机推荐
- 微软发布开源平台 Radius:高效构建、运行基于Dapr 云原生应用程序
Microsoft Azure 孵化团队很高兴地宣布[1]推出一个名为 Radius 的新开放应用程序平台,该平台将应用程序置于每个开发阶段的中心,重新定义应用程序的构建.管理和理解方式.Radius ...
- k 分算法是 k 越大越好吗?
引入 我们有二分算法,就是: 定义 二分查找(英语:binary search),也称折半搜索(英语:half-interval search).对数搜索(英语:logarithmic search) ...
- k8s-1.23.6 安装部署文档(超详细)
一.文档简介 作者:lanjiaxuan 邮箱:lanheader@163.com 博客地址:https://www.cnblogs.com/lanheader/ 更新时间:2022-09-09 二. ...
- LAMP配置与应用
LAMP配置与应用 1.1 动态资源和语言 WEB 资源类型: 静态资源:原始形式与响应内容一致,在客户端浏览器执行 动态资源:原始形式通常为程序文件,需要在服务器端执行之后,将执行结果返回给客户端 ...
- P4870 [BalticOI 2009 Day1]甲虫 题解
题目链接 简要题意 在一个数轴上有 \(n\) 滴露水,每滴露水初始水量为 \(m\),每秒会蒸发一滴水,一个甲虫初始在原点,速度为 1,水能瞬间喝完,问它最多能喝到几滴水. 题目分析 对于这种移动区 ...
- IDEA的Maven换源
打开IDEA安装路径,然后打开下面的文件夹 plugins\maven\lib\maven3\conf 在conf文件目录下出现一个setting.xml的文件.(ps:如果没有,请忽略本文,自行创建 ...
- [Python急救站课程]正方形螺旋线的绘制
正方形螺旋线的绘制 import turtle turtle.speed('fastest') # 加快画笔速度 length = 3 # 正方形边长 angle = 90 # 转向角度 for i ...
- animate.css 动画库的下载与使用
作者:WangMin 格言:努力做好自己喜欢的每一件事 animate.css是什么? animate.css 是一个有趣,酷炫的,跨浏览器的动画库,里面包含了许多常用的css动画.你可以将它用于你的 ...
- Mybatis和其他主流框架的整合使用
Mybatis简介 MyBatis历史 MyBatis最初是Apache的一个开源项目iBatis, 2010年6月这个项目由Apache Software Foundation迁移到了Google ...
- Android 锁屏时的生命周期
锁定屏幕前,应用被打开:onCreate->onStart->onResume 此时按下电源键,锁定屏幕:onPause->onStop 解锁屏幕,重新回到应用:onRestart- ...