Python 遠端連線 hive

2021-10-01 15:06:32 字數 3065 閱讀 7413

來自:

首先是pyhive的安裝:pyhive這個包依 賴於sasl,thrift,thrift-sasl這三個包,因此請參照下面的順序安裝

pip install sasl

pip install thrift

pip install thrift-sasl

pip install pyhive

pip安裝sasl報錯

debian/ubuntu:

sudo

apt-get

install python-dev libsasl2-dev gcc

pip install pyhs2 #代替上邊4個包安裝

centos/rhel:

sudo yum install gcc-c++ python-devel.x86_64 cyrus-sasl-devel.x86_64

pip install pyhs2

連線資料庫,如果需要設定密碼,那麼必須制定auth引數

from pyhive import hive

conn = hive.connect(host=

"server_ip"

,port=

10000

, auth=

"custom"

, database=

"..."

,username=

"..."

,password=

"..."

)

query_sql =

"select * from users"

curosr = conn.cursor(

)curosr.execute(query_sql)

# 獲得列的資訊

clumns = curosr.description

# 獲取全部資料,result是tuple

for result in curosr.fetchall():

print

(result)

curosr.close(

)

查詢結果以tuple的形式返回,與之對應的列資訊存放在curosr.description 中,如果想最終以字典的形式獲得資料,那麼需要根據description 和result進行組裝。

編寫乙個hiveclient 類,只實現query功能,但是支援返回字典格式的資料,同時如果連線斷開,可以進行重連

from itertools import zip_longest

from pyhive import hive

from functools import wraps

class

retry

(object):

def__init__

(self, retry=3)

: self.retry = retry

def__call__

(self, func)

: @wraps(func)

def(conn, query_sql)

: retry_count =

0while retry_count < self.retry:

try:

return func(conn, query_sql)

except exception as e:

print

(str

(e))

conn.init_connection(

) retry_count +=

1continue

raise exception(

"多次重試仍然失敗,sql語句為: "

+ query_sql)

class

hiveclient

(object):

def__init__

(self, host, port, username, password, auth=

'custom'):

self.host = host

self.port = port

self.username = username

self.password = password

self.auth = auth

self.init_connection(

)def

init_connection

(self)

: self.conn = hive.connection(host=self.host, port=self.port, username=self.username,password=self.password, auth=self.auth)

@retry(

)def

query

(self, query_sql)

: datas =

curosr = self.conn.cursor(

) curosr.execute(query_sql)

clumns = curosr.description

for result in curosr.fetchall():

item =

for key, value in zip_longest(clumns, result)

: item[key[0]

]= value

curosr.close(

)return datas

hc = hiveclient(

'ip'

,15000

,'username'

,'password'

)sql =

"select * from user"

data = hc.query(sql)

print

(data)

hive使用beeline配置遠端連線

hive以hadoop集群為基礎,提供hdfs的sql支援 介紹hive的遠端訪問 未配置之前使用beeline的話,每次都要為連線輸入使用者名稱密碼,較為麻煩 實現目標 在非集群節點上敲beeline命令,直接進入到hive的命令列 1,在hive服務的安裝節點的hive site.xml配置檔案...

python連線hive配置

注 python端所在伺服器為centos6.8 參考博文 重要一點,hive是個客戶端,不是集群,在hive所在節點必須執行如下命令 hive service hiveserver2 參考博文 注 客戶端指的是裝有anaconda的python環境的linux機器,並非裝有hive的機器 以下涉及...

python連線hive配置

注 python端所在伺服器為centos6.8 重要一點,hive是個客戶端,不是集群,在hive所在節點必須執行如下命令 hive service hiveserver2 二,訪問hive的客戶端 以下涉及所有包,1 yum install gcc c 2 yum install python ...