Python 连接hive(Linux)

前言

之所以选择基于Linux系统用Python连接hive,是因为在window下会出现Hadoop认证失败的问题。会出现执行python脚本的机器无目标hive的kerberos认证信息类似错误,也会出现sasl调用问题:

thrift.transport.TTransport.TTransportException: Could not start SASL: Error in sasl_client_start (-4) SASL(-4): no mechanism available: Unable to find a callback: 2

该错误我尝试多次,未能解决(有知道window下解决方案的欢迎留言),所以建议使用Linux系统。

1 环境配置

VMware Workstation +Ubuntu

软件下载

  • Ubuntu安装
    国内有很多开源的镜像网站,本文采用清华的开源(根据本机电脑具体情况选择32位或者64位的)
    官网:https://mirrors.tuna.tsinghua.edu.cn/ubuntu-releases/18.04/
Python 连接hive(Linux)_第1张图片
image.png
  • VMware Workstation下载
    网上有很资源,选择自己合适(喜欢)的就好,本文选择的是下图中红色框框的版本。
    网址:http://so.cr173.com/search/d/vmware_all_rank.html
    Python 连接hive(Linux)_第2张图片
    image.png

软件安装

网上教程很多,本文推荐一个教程:https://blog.csdn.net/stpeace/article/details/78598333

2 依赖包

主要是以下四个包:

pip install sasl
pip install thrift
pip install thrift-sasl
pip install PyHive

在安装包sasl的过程会出现麻烦,主要是Ubuntu中缺乏sasl.h的问题,这里可以通过下面语句解决

sudo apt-get install libsasl2-dev

这和centos有一些区别。

  • 【注解】Windows下安装sasl包可参考我的另外一篇笔记:https://www.jianshu.com/p/c67657db5a93
    接下来一般就可以顺利安装以上四个包,记住thrift-sasl的名字可能为thrift_sasl,注意连接符的区别。

3 测试代码

本文是基于本机虚拟机用Python连接的公司测试环境的hive(生产环境和测试环境是有隔离的,生产环境需要堡垒机才能连接)

import sys
from pyhive import hive

conn = hive.connect(host="server_ip",port=10000, auth="...", database="...",username="...",password="...")
cursor = conn.cursor()
cursor.execute("show tables")
res = cursor.fetchall()
conn.close()
for item in res:
     print(item)
  • host为IP,post为端口,auth有多种模式,我用的是“LDAP”,也可以尝试“NOSASL”等。

4 最后

因缺乏工程和计算机基础的知识,对很多的地方都了解的不够深入,欢迎大神指点,最后向以下两位大佬的帖子致谢:
[1]https://www.zhihu.com/question/269333988/answer/581126392
[2]https://mp.weixin.qq.com/s/cdFxkphMtJASQ7-nKt13mg

你可能感兴趣的:(Python 连接hive(Linux))