python读取hive数据库

2023年1月1日08:27:22

大数据工作中经常碰到需要将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 即可

下载好相关库后,我们直接上代码。

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

  • 作者:rains0701
  • 原文链接:https://blog.csdn.net/qq_24173131/article/details/127799830
    更新时间:2023年1月1日08:27:22 ,共 1653 字。