在大数据工作中经常碰到需要将hive查询数据导入到mysql的需求,常见的方法主要有两种,一是impala,另一种则是pyhive。
一、pyhive方式连接hive数据库
首先是配置相关的环境及使用的库。sasl、thrift、thrift_sasl、pyhive。
其中sasl安装较为麻烦一点,在Linux下直接安装可能会出现sasl.h头文件丢失问题,原因是sasl的源码已经许久没有维护了,代码结构与现有的代码结构不一样,下面分别给出win及Linux下的安装方法。https://www.lfd.uci.edu/~gohlke/pythonlibs/#sasl
windows下:
1.下载sasl安装文件,进行离线安装sasl,下载网址:https://www.lfd.uci.edu/~gohlke/pythonlibs/#sasl,版本选择适合自己的即可。
2.安装:
pip install sasl-0.2.1-cp36-cp36m-win_amd64.whl
pip install thrift -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install thrift_sasl==0.3.0 -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install pyhive -i https://pypi.tuna.tsinghua.edu.cn/simple
Linux下:
如果存在sasl.h头文件问题,可以通过pip安装libsasl2-dev包,再安装sasl
apt-get install libsasl2-dev
pip install sasl
pip install thrift
pip install thrift-sasl
pip install PyHive
注意不要漏装,否则报错。
二、impala方式连接hive数据库
直接 pip install impala 即可
下载好相关库后,我们直接上代码。文章来源:https://uudwc.com/A/dR0
from impala.dbapi import connect
from impala.util import as_pandas
import pandas as pd
from pyhive import hive
class LinkHive(object):
def __init__(self,host,port,database):
self.host = host
self.port = port
# self.username = username
# self.password = password
self.database = database
def __link(self):
# 1、pyhive连接
self.conn = hive.Connection(host=self.host,port=self.port,database=self.database)
#2、impla连接
# self.conn = connect(host=self.host, port=self.port, database=self.database)
self.cur = self.conn.cursor()
# CUSTOM LDAP
def selectdata(self,sql):
try:
self.__link()
except Exception as e:
print('link error:')
print(e)
try:
#c = self.cur.fetchall()
pd.read_sql(sql,self.conn) //pihive读取数据
# self.cur.execute(sql) //impala读取数据
# result = as_pandas(self.cur) //impala读取数据后转为pandas的DataFrame
except Exception as e:
print('query error:')
print(e)
# 关闭连接 释放资源
self.cur.close()
self.conn.close()
return result
文章来源地址https://uudwc.com/A/dR0