thrift例子:python客戶端/java服務端


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()

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM