您的位置:首页 > 编程语言 > Python开发

thrift例子:python客户端/java服务端

2017-08-25 11:41 585 查看
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()
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: