python通過thrift方式連線hive
阿新 • • 發佈:2019-02-17
nohup hive --service metastore &
[hadoop@master1 usr]$ hive
Logging initialized using configuration in file:/data/usr/hive/conf/hive-log4j.properties
hive> use fmcm;
OK
Time taken: 0.874 seconds
如果是要指令碼呼叫,則需要啟用HiveServer2,確保10000埠已經被監聽(可在hive-site.xml中修改埠)
nohup hive --service hiveserver2 &
[hadoop@master1 usr]$ netstat -an|grep 10000
tcp 0 0 0.0.0.0:10000 0.0.0.0:* LISTEN
HiveServer2為客戶端在遠端執行hive查詢提供了介面,通過Thrift RPC來實現,還提供了多使用者併發和認證功能。目前python可以通過pyhs2這個模組來連線HiveServer2,實現查詢和取回結果的操作。
不過pyhs2已經不在維護,追新的可以參考另外2個很好的python package(已經被證明pyhs2存在效能瓶頸,最好儘快切換到pyhive)
安裝sasl 失敗的話,先安裝:
yum install gcc-c++ python-devel.x86_64 cyrus-sasl-devel.x86_64
pyhs2的專案託管在github之上,地址為https://github.com/BradRuderman/pyhs2或在https://pypi.python.org/pypi/pyhs2/0.2直接下載
如果安裝不成功,可以嘗試先安裝以下的元件:
yum install cyrus-sasl-plain
yum install cyrus-sasl-devel
安裝時如果遇到報錯:
error: sasl/sasl.h: No such file or directory
可以嘗試先安裝sasl , ubantu可以用sudo apt-get install libsasl2-dev, CentOS可以使用anaconda的pip安裝, 或者按照以下步驟安裝:
curl -O -L ftp://ftp.cyrusimap.org/cyrus-sasl/cyrus-sasl-2.1.26.tar.gz
tar xzf cyrus-sasl-2.1.2.26.tar.gz
cd cyrus-sasl-2.1.26.tar.gz
./configure && make install
最後附上測試程式碼:
# -*- coding:utf-8 -*-
'''
採用Hive和thrift方式連線資料庫
'''
import pyhs2
import sys
reload(sys)
sys.setdefaultencoding('utf8')
classHiveClient:
def__init__(self, db_host, user, password, database, port=10000, authMechanism="PLAIN"):
self.conn = pyhs2.connect(host=db_host,
port=port,
authMechanism=authMechanism,
user=user,
password=password,
database=database,
)
defquery(self, sql):
with self.conn.cursor() as cursor:
cursor.execute(sql)
return cursor.fetch()
defclose(self):
self.conn.close()
defmain():
"""
main process
@rtype:
@return:
@note:
"""
hive_client = HiveClient(db_host='10.24.33.3', port=10000, user='hadoop', password='hadoop',
database='fmcm', authMechanism='PLAIN')
result = hive_client.query('select * from fm_news_newsaction limit 10')
print result
hive_client.close()
if __name__ == '__main__':
main()