做大資料分析及應用過程中,時常需要面對海量的資料儲存及計算,傳統的伺服器已經很難再滿足一些運算需求,基於hadoop/spark的大資料處理平台得到廣泛的應用。本文介紹用python讀取hive資料庫的方式,其中還是存在一些坑,這裡我也把自己遇到的進行分享交流。
集團有20臺伺服器(其中1臺採集主節點,1台大資料監控平台,1臺集群主節點,17臺集群節點),65thdfs的磁碟資源,3.5t的yarn記憶體,等等。專案目前需要對集團的家庭畫像資料分析,通過其樓盤,收視節目偏好,家庭收入等資料進行區域性的分析;同時對節目畫像及樓盤詳細資料進行判斷分析。本人習慣使用r語言和python來分析,故採用了本次分享的資料獲取部分的想法。
首先是配置相關的環境及使用的庫。sasl、thrift、thrift_sasl、pyhive。
pip install sasl-0.2.1-cp36-cp36m-win_amd64.whl
pip install thrift -i
pip install thrift_sasl==0.3.0 -i
pip install pyhive -i
from pyhive import hive
import pandas as pd
# 讀取資料
def select_pyhive(sql):
# 建立hive連線
conn = hive.connection(host='10.16.15.2', port=10000, username='hive', database='user')
cur = conn.cursor()
try:
#c = cur.fetchall()
df = pd.read_sql(sql, conn)
return df
finally:
if conn:
conn.close()
sql = "select * from user_huaxiang_wide_table"
df = select_pyhive(sql)
獲取到hive資料庫中約193w的家庭畫像資料,37個字段。
可以看出**並不是很複雜,但是大家在測試時可能會出現以下兩種常見的問題。
解決一:
pip install thrift_sasl==0.3.0 -i ,更新依賴thrift_sasl包到0.3.0即可
impala方式連線hive資料庫,但是資料量過大會導致python卡死,目前還未找到合適方式解決。
首先是配置相關的環境及使用的庫。sasl、thrift、thrift_sasl、impala。
pip install sasl-0.2.1-cp36-cp36m-win_amd64.whl
pip install thrift -i
pip install thrift_sasl==0.2.0 -i
pip install impala -i
pip install thriftpy -i
from impala.dbapi import connect
from impala.util import as_pandas
import pandas as pd
# 獲取資料
def select_hive(sql):
# 建立hive連線
conn = connect(host='10.16.15.2', port=10000, auth_mechanism='plain',user='hive', password='user@123', database='user')
cur = conn.cursor()
try:
#cur.execute(sql)
c = cur.fetchall()
df = as_pandas(cur)
return df
finally:
if conn:
conn.close()
data = select_hive(sql = 'select * from user_huaxiang_wide_table limit 100')
這個impala方式也是很方便,但是當資料量到達一定程度,則就會在fetchall處一直處於執行狀態,幾個小時也沒有響應。 HIVE倉庫擴充套件 連線hive資料庫
一 命令列客戶端工具 hivecli cli是和hive互動的最簡單 最常用方式,你只需要在乙個具備完整hive環境下的shell終端中鍵入hive即可啟動服務。beeline beeline是hive新的命令列客戶端工具。hive客戶端工具後續將使用beeline 替代hivecli 並且後續版本...
spark連線預設hive資料庫
在配置和檢視配置之前先弄清楚兩個概念 hive on spark hive預設在mr上跑,可改成在spark記憶體上跑 spark on hive 不管如何執行spark sql,預設讀取的hive資料庫,其實spark不是直接讀取hive資料庫,而是讀取hive元資料和hdfs,那就是要配置hiv...
Python庫之資料庫連線
資料庫連線可用於連線眾多資料庫以及訪問通用資料庫介面,可用於資料庫維護 管理和增 刪 改 查等日常操作。1.mysql connector python 型別 第三方庫 描述 mysql官方驅動連線程式 推薦度 13.bsddb3 型別 第三方庫 描述 berkeley db連線庫 15.dbhas...