來自:
首先是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 ...