【pyhive】本地使用pyhive连接hive数据库踩的坑
生活随笔
收集整理的這篇文章主要介紹了
【pyhive】本地使用pyhive连接hive数据库踩的坑
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
? ? ? ?OK,本文來看看本地在PyCharm中使用pyhive連接hive數據庫時踩過的坑吧,先看看一眼小編的測試代碼~
? ? ? ?首先是封裝了一個連接hive獲取數據的類,因為是測試,所以寫的簡單了些,如下:
''' @File : sql.py @Author: xzw @Date : 2020/6/14 @Desc : 封裝類 '''from pyhive import hive import pandas as pdclass TestHive(object):'''連接Hive獲取數據'''def __init__(self, host, port, username, database):'''初始化方法:param host: 地址:param port: 端口號:param username: 用戶名:param database: 數據庫名稱'''self.conn = hive.Connection(host=host, port=port, username=username, database=database)def get_data(self, sql):'''獲取數據:param sql: SQL語句:return: 返回得到的數據'''data = pd.read_sql(sql, self.conn)return data? ? ? ?然后是測試類:
''' @File : manager.py @Author: xzw @Date : 2020/6/14 @Desc : 訪問Hive獲取數據 '''from connect_hive.sql import TestHive from fastapi import FastAPI import uvicornapp = FastAPI()@app.get("/get_hive_data") def get_data():'''獲取hive中的數據:return:'''host, port, username, database = 'cdh-master', 10000, 'hive', 'test'instance = TestHive(host, port, username, database)result = instance.get_data("select * from xzw")return {"result": result}if __name__ == '__main__':uvicorn.run(app="manager:app", host="127.0.0.1", port=9999, reload=True, debug=True)? ? ? ?上面就是整個過程的簡單代碼,想象著很快就能拿到hive中的數據了,然后……坑來了~
? ? ? ?第一個坑:
thrift.transport.TTransport.TTransportException: Could not start SASL: b'Error in sasl_client_start (-4) SASL(-4): no mechanism available: Unable to find a callback: 2'? ? ? ?解決辦法是在Connection中添加auth="NOSASL":
self.conn = hive.Connection(host=host, port=port, username=username, database=database, auth="NOSASL")? ? ? ?第二個坑:
Connection Issue: thrift.transport.TTransport.TTransportException: TSocket read 0 bytes? ? ? ?解決辦法是在hive-site.xml中增加下面屬性:
<property><name>hive.server2.authentication</name><value>NOSASL</value> </property>? ? ? ?當然,小編使用的是CDH搭建的集群,直接在監控界面配置即可,如下所示:
總結
以上是生活随笔為你收集整理的【pyhive】本地使用pyhive连接hive数据库踩的坑的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux下oracle11g的安装-图
- 下一篇: SCM供应链管理系统解决方案:助力企业采