数据库开发实战教程:使用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 ...
随机推荐
- options has an unknown property ‘contentBase‘
options has an unknown property 'contentBase' 踩坑新版webpack-dev-serve 新版的contentBase取消了替代属性是static
- D 算法模板(Boruvka's Algorithm)
Description 为了方便你测试,本题为D题简化版. You are given a complete undirected graph with nn vertices. A number a ...
- 17.1 隐藏执行CMD命令
本章内容涉及使用Socket API和CMD命令行工具实现本地CMD命令执行.无管道正向CMD和无管道反向CMD三种功能.执行本地CMD实现使用CreateProcess函数创建一个新的CMD进程,并 ...
- 欢迎来到hitcorgi,corgi居然被抢注了
1 #include <iostream> 2 3 using namespace std; 4 5 int main() 6 { 7 cout << "Hello ...
- [Python急救站课程]叠加等边三角形的绘制
叠加等边三角形的绘制 from turtle import * penup() fd(-100) pendown() pensize(10) seth(60) fd(200) seth(-60) fd ...
- 使用Github Copilot生成单元测试并执行
上一篇文章我们介绍了 使用Github Copilot完成代码编写 本文我们继续使用Github Copilot在已有代码的基础上生成代码测试并执行. 一.先说一下代码的背景 需要上需要提供一个度量衡 ...
- 不懂乐理,也能扒谱,基于openvpi将mp3转换为midi乐谱(Python3.10)
所谓"扒谱"是指通过听歌或观看演奏视频等方式,逐步分析和还原音乐作品的曲谱或乐谱的过程.它是音乐学习和演奏的一种常见方法,通常由音乐爱好者.乐手或学生使用. 在扒谱的过程中,人们会 ...
- python之继承及其实现方法
目录 继承 语法格式 继承的代码实现 多继承 继承 语法格式 class 子类类名(父类1, 父类2...): pass r如果一个类没有继承任何类,则默认继承object python支持多继承 定 ...
- Android 输入系统介绍
目录 一.目的 二.环境 三.相关概念 3.1 输入设备 3.2 UEVENT机制 3.3 JNI 3.4 EPOLL机制 3.5 INotify 四.详细设计 4.1 结构图 4.2 代码结构 4. ...
- 【Javaweb】做一个房产信息管理系统三(src目录的部署工作【三层框架】各个层含义)
接下来,我打算进行Java文件的部署工作,但实际上为了得到更多的分数,我们还是应该先做页面 首先我们需要了解对于Javaweb,src下的目录应该如何部署:(三层架构单独开一篇讲) 那么这些都有什么含 ...