数据库开发实战教程:使用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 ...
随机推荐
- vue 基于原生动画的自动滚动表格
前言 公司展示大屏需要写滚动表格,通过滚动播放数据,自己随便摸了一个基于动画的自动滚动表格 原理 根据每行的大小和设置的每行滚动时间设置滚动位置,动态添加动画,并把数组第一项移动到最后一项,并订阅该动 ...
- 01--OpenStack 手动安装手册(Icehouse)
#OpenStack 手动安装手册(Icehouse) 声明:本博客欢迎转发,但请保留原作者信息!作者:[罗勇] 云计算工程师.敏捷开发实践者博客:http://yongluo2013.github. ...
- HDU1702 ACboy needs your help again! 题解
#include <iostream> #include <string> #include <queue> #include <stack> usin ...
- [CF1178 F2] Long Colorful Strip
F2 - Long Colorful Strip 很牛的题! 首先,我们可以将颜色相同的一段区间缩成一个点,那么每次加入一个新的颜色时,最多只能将其所覆盖的那个颜色所属的区间分成三部分(原本:0000 ...
- 【实操】Java+百度ocr,实现图片识别文字小工具
前言 缘由 图片识别文字,咱用java也可以 通过java+百度ocr,实现一个截图或上传图片,图片识别文字的小工具.并通过exe4j工具将jar包封装成exe可执行桌面文件,方便使用及学习. Tip ...
- k8s-单节点升级为集群(高可用)
单master节点升级为高可用集群 对于生产环境来说,单节点master风险太大了. 非常有必要做一个高可用的集群,这里的高可用主要是针对控制面板来说的,比如 kube-apiserver.etcd. ...
- 数据结构-线性表-单链表(c++)
线性表的运算 求长度GetLength(L),求线性表L的长度 置空表SetNull(L),将线性表置成空表 按位查找Get(L,i),查找线性表L第i个元素 按值查找Location(L,x),查找 ...
- EhCache使用详细介绍
http://hi.baidu.com/yjl_zzh/item/18e6518397cdd1d9d1f8cdfb 2.EhCache的使用注意点 当用Hibernate的方式修改表数据(sav ...
- 什么是cursor?怎么使用cursor?
Cursor 在Android查询数据时就是通过Cursor类来实现的.当我们使用SQLiteDatabase.query()方法时,就会得到Cursor对象,Cursor所指向的就是每一条数据. 举 ...
- Unit_ptr数据类型的理解
1.相关代码理解 在看代码时,发现有用到 SOCKET 我去找它们的定义,发现有如下定义: typedef UINT_PTR SOCKET 又去看UINT_PTR,LONG_PTR, LONG_PT ...