文章详情

短信预约信息系统项目管理师 报名、考试、查分时间动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

数据库开发实战教程:使用Python连接Kerberos的Presto

2022-03-31 00:05

关注

数据库开发实战教程:使用Python连接Kerberos的Presto

【摘要】本文将为大家带来Python连接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

(1)安装依赖

pip3 install pandas

sudo apt-get install python3-dev

sudo apt install krb5-multidev

pip3 install requests_kerberos

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)安装依赖

sudo apt-get install python3-dev

sudo apt install krb5-multidev

pip3 install requests_kerberos

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)
  1. 运行结果

那些踩的坑

  1. 用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,若成功则,参数正确。

点击关注,第一时间了解华为云新鲜技术~

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯