python连接hive

系统 2667 0

前言

之前在读hive数据的时候,经常使用读hdfs parquet文件的方法,虽然封装函数一样,调用起来也方便,但是总觉得不得劲,既然我需要的是hive数据,为何不直接读hive呢?刚好今天又遇到了这个问题,就花了两个小时,研究了不同的方法,mark一下,以便查阅。好了,进入正题,下面列出了两种方法,但大体上差不多,可根据需要选择。另外,还看到使用 impala 操作hive的方法,没有详细研究,有空再看看。

pyhive

在网上查了一下,使用比较多的是 pyhs2 和 pyhive,看了下pyhs2已经好多年没有更新了,转而研究pyhive,操作步骤如下:

  1. conda install sasl    ##网上很多资料都是使用pip安装,但是大多会遇到下面的错误信息,强烈建议使用conda安装。这里提示一下,不仅仅是这个包,其他包遇到pip不能安装的时候,也使用conda试试,因为pip有些包需要gcc编译等,对环境要求比较高。
                    
                      ERROR: Command errored out with exit status 1: anaconda3/bin/python -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-_iihdxsa/sasl/setup.py'"'"'; __file__='"'"'/tmp/pip-install-_iihdxsa/sasl/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' install --record /tmp/pip-record-kukgvvno/install-record.txt --single-version-externally-managed --compile Check the logs for full command output.
                    
                  
  2. pip install thrift-sasl
  3. pip install PyHive

测试程序如下:

            
              from pyhive import hive
import pandas as pd

cursor = hive.connect(host=IP,port=10000, auth="LDAP", database="default", username="test", password="test").cursor()
cursor.execute('select * from test_table')

data = cursor.fetchall()
columns = [col[0].split('.')[-1] for col in cursor.description]
data = pd.DataFrame(data=data, columns=columns)

print(data.shape)
            
          

因为我的hive是采用LDAP认证的,所以需要提供用户名、密码,如果不是这种方式,参考官方demo稍微改一下就可以了。另外,大家可能看到使用 hive.Connection 的方式连接hive的,其实这种方法和 hive.connect 一样,看一下源码就明白了,后者调用了前者。

pandas

采用pandas读取hive是偶然间在网上看到的,测试后发现挺好用的,毕竟pandas好用。首先看一下自己是否有 SQLAlchemy 这个包,如果没有执行下面命令安装:

pip install SQLAlchemy

测试程序如下:

            
              import pandas as pd
from sqlalchemy import create_engine

engine = create_engine('hive://username:passwd@IP:10000/default?auth=LDAP')
data = pd.read_sql("SELECT * FROM test_table",con=engine)

print(data.shape)
            
          

上述程序同样使用了LDAP认证,pandas的源码中同样提供了使用demo,看一下就明白了。SQLAlchemy 的使用请看参考资料链接。

参考资料

https://docs.sqlalchemy.org/en/13/


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论