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

  • 安装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的ipport=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 prestopresto_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.  运行结果

那些踩的坑

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

点击这里,了解更多精彩内容

【华为云技术分享】使用Python连接Kerberos的Presto相关推荐

  1. 【华为云技术分享】Python大神编程常用4大工具,你用过几个?

    摘要:Python是一种跨平台的编程语言,能够在所有主要的操作系统上,运行你编写的任何Python程序.今天介绍几款常见的工具:Python自带的解释器.文本编辑器(Geany.Sublime Tex ...

  2. 【华为云技术分享】mongos-sharding连接池配置

    ShardingTaskExecutorPoolMaxSize Maximum number of outbound connections each TaskExecutor connection ...

  3. 【华为云技术分享】Python 中的异常和错误

    [摘要] 异常就是程序运行时发生错误的信号,在python中,错误触发的异常如下 异常和错误 第一:程序中难免出现错误,而错误分成两种 1.语法错误(这种错误,根本过不了python解释器的语法检测, ...

  4. 【华为云技术分享】python教程:猴子补丁

    猴子补丁指在运行时修改类或者模块,而不是改动定义类或者模块的源代码. 假设有预先定义的类A: class Apple:def __init__(self):self._color = 'red'def ...

  5. 【华为云技术分享】三大前端技术(React,Vue,Angular)探密(下)

    [华为云技术分享]三大前端技术(React,Vue,Angular)探密(上) [Angular] Angular(通常被称为 "Angular 2+"或 "Angula ...

  6. 【华为云技术分享】“技术-经济范式”视角下的开源软件演进剖析-part 1

    前言 以互联网为代表的信息技术的迅猛发展对整个经济体系产生了巨大的影响.信息技术的发展一方面使知识的积累和传播更加迅速,知识爆炸性的增长:另一方面,使信息的获取变得越来越容易,信息交流的强度逐渐增加, ...

  7. 【华为云技术分享】“技术-经济范式”视角下的开源软件演进剖析-part 3

    4. 微观层面 4.1 个体动机 在开源软件发展之初, 商业组织的投入很少甚至没有, 完全是靠Richard Stallman 或者 linus Torvalds 这样的个人在努力推动开源软件艰难前行 ...

  8. 【华为云技术分享】直播回顾丨激发数据裂变新动能,HDC.Cloud云数据库前沿技术解读

    3月24日14:00-17:00,HDC.Cloud开发者沙龙系列云数据库专场直播线上开启,此次华为云数据库通过三场直播从NoSQL数据库新技术.数据库迁移.行业解决方案等方面对云端数据库进行深度解读 ...

  9. python连接hive kerberos_【华为云技术分享】使用Python连接Kerberos的Presto

    Python连接presto开源提供了以下两个库可以使用 接下来就来分别实践一下,这两种客户端. 环境准备 1.       创建一台Ubuntu的ECS,VPC选择和MRS集群一致 2.       ...

最新文章

  1. R语言 (温度 随时间变化)
  2. 5G最完整的PPT教材
  3. C#中Split函数的使用
  4. java过滤乱码 \u形式乱码 unicode乱码
  5. CentOS 安装及使用 terraform 最新教程
  6. 软件测试部分练习题答案
  7. canny边缘检测算法_OpenCV4中调用HED边缘检测算法
  8. 带桭字的名字_带芙字的名字 好名字从出生就伴随我们一生 必须雅致
  9. web系统之猜数游戏——项目总结
  10. 三星平板电脑html文件放在哪里,三星Tab3怎么连接电脑?三星Tab3平板电脑连接电脑的方法图解...
  11. 2021-09-23 latex 实心圆编号
  12. 【算法学习】 位运算中的奇巧淫记
  13. PHP文件怎么改tne,修改 · thinkphp6文档 · 看云
  14. 2018, 数据分析师的就业前景如何?
  15. xUnit安装及注意事项
  16. 移动端网页站点调用拨打电话发送短信等功能
  17. 【压测】压力测试ab的用法【原创】.md
  18. tf.layers.flatten()使用
  19. 十 三 弟 你 快 回 来 吧, 皇 帝 四 哥 叫 你 一 起 学 习 大 数 据 呢
  20. 云炬股市学习笔记20220118

热门文章

  1. es6 Class 表达式
  2. java ee会话_Java EE会话技术Cookie和Session
  3. quartz cron 每周一_quartz框架和关闭超时订单
  4. cleanmymac3.9.6_Android Studio 3.6 特征大揭秘
  5. img pdf 展示_pdf.js实现图片在线预览
  6. java thread join()_Java中Thread.join()的使用方法
  7. error C2662
  8. 查找目录下固定文件目录以及路径(自然排序)
  9. Java多线程学习(二)synchronized关键字(1)
  10. [bzoj] 2049 洞穴勘探 || LCT