基于python impyla的hive客户端

简介: 打开微信扫一扫,关注微信公众号【数据与算法联盟】 转载请注明出处:http://blog.csdn.net/gamer_gyt 博主微博:http://weibo.


这里写图片描述
打开微信扫一扫,关注微信公众号【数据与算法联盟】


转载请注明出处:http://blog.csdn.net/gamer_gyt
博主微博:http://weibo.com/234654758
Github:https://github.com/thinkgamer


写在前边的话

在hive部署的时候我们谈过hive的三种访问方式

  • CLI(shell 终端)
  • HWI (Hive的web页面操作)
  • thrift (启动hiveserver2服务,基于thrift建立hive的操作)

第三种thrift方式的,网友们进行了封装,目前有三个广负盛名的python backage

小主本地环境介绍

  • CentOS6.5 /64 位
  • python 2.7

这里小主做的web可视化界面比较菜看两张截图吧(这个是HIW项目的一部分 github-HIW
这里写图片描述
这里写图片描述


部署

impyla必须的依赖包括:

  • six
  • bit_array
  • thriftpy(python2.x则是thrift)

为了支持Hive还需要以下两个包:

  • sasl
  • thrift_sasl

先安装依赖

pip install thrift_sasl
pip install sasl

报错:

gcc: error trying to exec 'cc1plus': execvp: No such file or directory
error: command 'gcc' failed with exit status 1

解决办法:
缺少g++文件

yum install gcc-c++
(centos中g++叫gcc-c++,如果直接安装g++会出现No package g++ available.    Error: Nothing to do )

又报错:

UnicodeDecodeError: 'ascii' codec can't decode byte 0xe2 in position 73: ordinal not i

解决办法:
在python安装目录的site-packages目录下,创建sitecustomize.py,python会自动加载,添加

import sys
sys.setdefaultencoding('utf-8')
如果涉及到中文只需将utf-8修改为gb2312 即可

又报错:

sasl/saslwrapper.h:22:23: error: sasl/sasl.h: No such file or directory

解决办法
centos解决办法:

yum install gcc-c++ python-devel.x86_64 cyrus-sasl-devel.x86_64

ubuntu/deepin(小主自己的是deepin)

sudo apt-get install libsasl2-dev

然后执行

pip install thrift_sasl
pip install sasl

OK


pip命令安装:

pip install impyla

报错:

bitarray/_bitarray.c:9:20: fatal error: Python.h: 没有那个文件或目录
compilation terminated.
error: command 'x86_64-linux-gnu-gcc' failed with exit status 1

解决办法:
由于小主的是deepin 15.2 64位,python版本为2.7,其对应的解决办法是

sudo apt-get install python-dev 

python3.X版本对应的命令为

sudo apt-get install python3-dev

然后在执行安装命令即可

pip install impyla

一个小Demo

注意执行该程序之前,必须启动hiveserver2服务

from impala.dbapi import connect
#需要注意的是这里的auth_mechanism必须有,但database不必须
conn = connect(host='127.0.0.1', port=10000, database='default', auth_mechanism='PLAIN')
cur = conn.cursor()

cur.execute('SHOW DATABASES')
print(cur.fetchall())

cur.execute('SHOW Tables')
print(cur.fetchall())

关于auth_mechanism解释:
auth_mechanism的值取决于hive-site.xml里边的一个配置

<name>hive.server2.authentication</name>
<value>NOSASL</value>

auth_mechanism的值默认是NONE,还可以是“NOSASL”,“PLAIN”,“KERBEROS”,“LDAP”

对hql进行连续处理

很简单的应用场景便是我们要处理的N句SQL的连续体,而不是单句的SQL语句,我这里进行的处理办法是切分,使用python的split,然后再进行单句执行

#连接hive
def conn():
    con = connect(host="192.168.132.27",port=10000,auth_mechanism="PLAIN")
    cur = con.cursor()
    return cur

#执行HQL语句
def run_hql(sql):
    sql_list = sql[:-1].split(";")
    cur=conn()
    for s in sql_list:
        cur.execute(s)
    result=cur.fetchall()
    return result

if __name__=="__main__":
    sql="show databases;use default;show tables;"
    print run_hql(sql)                 

运行结果也是没有问题的

[root@master1 HIW]# python hive/phive.py
[('test',)]

后续若有可能的话,我会更新一些impyla的其他一些用法,因为网上关于impyla的资料很少,除了github项目地址之外很难再找到其他的,所以 如果你有好的文章或者教程的话,欢迎留言

相关文章
|
6月前
|
存储 Python
Python网络编程基础(Socket编程)UDP客户端编程
【4月更文挑战第9天】在UDP通信中,客户端负责发送数据到服务器,并接收来自服务器的响应。与服务器不同,客户端通常不需要绑定到特定的地址和端口,因为它可以临时使用任何可用的端口来发送数据。下面,我们将详细讲解UDP客户端编程的基本步骤。
|
6月前
|
网络协议 安全 Python
python中socket客户端关闭连接
【4月更文挑战第7天】本教程介绍了如何在TCP客户端中正确关闭连接。使用`close()`方法可关闭Socket连接并释放资源,示例代码显示了在正常和异常情况下关闭连接的方法。注意异常处理以确保在任何情况下都能关闭连接,并避免并发操作同一Socket,以保证连接的稳定和安全。掌握这些技巧对编写健壮的TCP客户端至关重要。
|
1月前
|
Python
Socket学习笔记(二):python通过socket实现客户端到服务器端的图片传输
使用Python的socket库实现客户端到服务器端的图片传输,包括客户端和服务器端的代码实现,以及传输结果的展示。
130 3
Socket学习笔记(二):python通过socket实现客户端到服务器端的图片传输
|
1月前
|
JSON 数据格式 Python
Socket学习笔记(一):python通过socket实现客户端到服务器端的文件传输
本文介绍了如何使用Python的socket模块实现客户端到服务器端的文件传输,包括客户端发送文件信息和内容,服务器端接收并保存文件的完整过程。
135 1
Socket学习笔记(一):python通过socket实现客户端到服务器端的文件传输
|
5月前
|
XML 物联网 API
服务端和客户端 RESTful 接口上传 Excel 的 Python 代码
本文作者木头左是物联网工程师,分享如何使用 Python 和 Flask-RESTful 构建一个简单的 RESTful API,实现文件上传功能,特别支持Excel文件。通过安装Flask和Flask-RESTful库,创建Flask应用,实现文件上传接口,并将其添加到API。该方法具有简单易用、灵活、可扩展及社区支持等优点。
服务端和客户端 RESTful 接口上传 Excel 的 Python 代码
|
1月前
|
SQL 存储 分布式计算
Hadoop-16-Hive HiveServer2 HS2 允许客户端远程执行HiveHQL HCatalog 集群规划 实机配置运行
Hadoop-16-Hive HiveServer2 HS2 允许客户端远程执行HiveHQL HCatalog 集群规划 实机配置运行
41 3
|
2月前
|
SQL JavaScript 前端开发
基于Python访问Hive的pytest测试代码实现
根据《用Java、Python来开发Hive应用》一文,建立了使用Python、来开发Hive应用的方法,产生的代码如下
69 6
基于Python访问Hive的pytest测试代码实现
|
2月前
|
关系型数据库 MySQL Python
mysql之python客户端封装类
mysql之python客户端封装类
|
2月前
|
SQL JavaScript 前端开发
用Java、Python来开发Hive应用
用Java、Python来开发Hive应用
33 6
|
3月前
|
网络协议 安全 Unix
6! 用Python脚本演示TCP 服务器与客户端通信过程!
6! 用Python脚本演示TCP 服务器与客户端通信过程!