thrift例子:python客戶端/java服務端
阿新 • • 發佈:2022-05-02
java服務端的程式碼請看上文。
1、說明:
這兩篇文章其實解決的問題是,當使用python去訪問大資料線上叢集的時候,遇到兩個問題:
1)python-hadoop和python-hive相關包連結不穩定,表現為經常出現連結超時;
2)如果使用fork程序執行hadoop fs或者hive -e的方式則消耗大量的機器資源,包括程序資源和叢集連結資源。
我們的解決方式是寫一個java的代理服務,使用java-hadoop封裝了對叢集的操作,通過thrift提供介面給python程式。
2、編譯.thrfit
thrift -gen py jazz.thrift
jazz.thrift內容如下
namespace java com.xiaoju.dqa.jazz.iface
service JazzService{
bool exists(1:string path)
}
會生成python的package gen-py,將它拷貝到你的工程中。
3、python客戶端
你需要安裝python的thrift支援。
pip install thrift
python客戶端的程式碼如下:
#!/usr/bin/env python #-*- coding:utf-8 -*- import sys sys.path.append('./gen-py') import traceback from jazz import JazzService #引入客戶端類 from thrift import Thrift from thrift.transport import TSocket from thrift.transport import TTransport from thrift.protocol import TBinaryProtocol, TCompactProtocol try: #建立socket transport = TSocket.TSocket('localhost', 9090) #選擇傳輸層,和服務端一致 # transport = TTransport.TFramedTransport(transport) # transport = TTransport.TFramedTransportFactory().getTransport(socket) #選擇傳輸協議,和服務端一致 transport = TTransport.TBufferedTransport(transport) protocol = TBinaryProtocol.TBinaryProtocol(transport) #protocol = TCompactProtocol.TCompactProtocol(transport) #建立客戶端 client = JazzService.Client(protocol) transport.open() is_exists = client.exists("/home/.../...") print is_exists #關閉傳輸 transport.close() #捕獲異常 except Thrift.TException, ex: traceback.print_exc()