python利用spyne远程调用HBase数据

来源:
声明:如果我侵犯了任何人的权利,请联系我,我会删除
欢迎高手来喷我

完整项目下载 https://github.com/gqj123/spyne-hbase
Python利用spyne 实现webservice服务

前提所有的网络和端口都可以同信:ping的同和telnet的通
spyne的原理啥的请移步https://www.cnblogs.com/guanfuchang/p/5985070.html,这个哥们的博客会有些介绍,我这里只讲我的应用
Client端发送请求之前,Server端需要开启并运行Spyne服务,Client再开启Spyne服务,双方建立TCP连接,然后进行通信
在这里插入图片描述

服务端代码server.py: 实现RangeQuery范围查询和PointQuery点查询

在linux服务器中运行这段代码 python server.py

 #!/usr/bin/env python
# -*- coding: utf-8 -*-

# 远程调用需要的包
from spyne import Application,rpc,ServiceBase,Iterable,Integer,Unicode
from spyne.protocol.soap import Soap11,Soap12
from spyne.server.wsgi import WsgiApplication

# HBase需要的包
from thrift import Thrift
from thrift.transport import TSocket
from thrift.transport import TTransport
from thrift.protocol import TBinaryProtocol
from hbase import Hbase
from hbase.ttypes import *
import happybase
import re
import sys  
import time
import os
import json


class RangeQuery(ServiceBase):    
    @rpc(Unicode,Unicode, Unicode, Unicode, Unicode, Unicode, Unicode, _returns=Unicode)
    def Range_Query(self,tableName,start_t,stop_t,lat_start,lon_start,lat_stop,lon_stop):
    	# 这里的9090是HBase的提供服务的端口
        transport = TSocket.TSocket('192.168.1.181', 9090)
        transport = TTransport.TBufferedTransport(transport)  
        protocol = TBinaryProtocol.TBinaryProtocol(transport)  
        client = Hbase.Client(protocol)
        transport.open()

        list_dict = []

        if start_t=='':
            start_t='0'
        if stop_t=='':
            stop_t='2030'

        startKey = start_t + '_' + lat_start + '_' + lon_start
        stopKey = stop_t + '_' + lat_stop + '_' + lon_stop
        #startKey = str(start_t).ljust(10, '0') + '_' + str("%3.2f" % float(lat_start)).rjust(6, '0') + '_' + str("%3.2f" % float(lon_start)).rjust(6, '0')
        #stopKey = str(stop_t).ljust(10, '0') + '_' + str("%3.2f" % float(lat_stop)).rjust(6, '0') + '_' + str("%3.2f" % float(lon_stop)).rjust(6, '0')

        scanner = client.scannerOpenWithStop(tableName, startKey, stopKey, [])
        while True:
            result = client.scannerGet(scanner)   # 根据ScannerID来获取结果
            if not result:
                break
            for dir in result:
                dict = {
   }
                dict["time"] = dir.columns.get('info:time').value
                dict["lat"] = dir.columns.get('info:lat').value
                dict["lon"] = dir.columns.get('info:lon').value
                
                if(tableName=="WL"):
                    dict["w_level"] = dir.columns.get('info:w_level').value
                if(tableName=="AT"):
                    dict["a_temperature"] = dir.columns.get('info:a_temperature').value
                if(tableName=="SLP"):
                    dict["pressure"] = dir.columns.get('info:pressure').value
                if(tableName=="SST"):
                    dict[
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值