【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 pd


class 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 uvicorn

app = 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搭建的集羣,直接在監控界面配置即可,如下所示:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章