如何在Python中访问HBase的数据

 我来答
就烦条0o
2016-10-16 · 知道合伙人软件行家
就烦条0o
知道合伙人软件行家
采纳数:33315 获赞数:46492
从事多年系统运维,喜欢编写各种小程序和脚本。

向TA提问 私信TA
展开全部

python访问hbase数据

#!/usr/bin/python

import getopt,sys,time
from thrift.transport.TSocket import TSocket
from thrift.transport.TTransport import TBufferedTransport
from thrift.protocol import TBinaryProtocol
from hbase import Hbase

def usage():
       print '''Usage :
       -h: Show help information;
       -l: Show all table in hbase;
       -t {table} Show table descriptors;
       -t {table} -k {key} : show cell;
       -t {table} -k {key} -c {coulmn} : Show the coulmn;
       -t {table} -k {key} -c {coulmn} -v {versions} : Show more version;
   (write by liuhuorong@koudai.com)
       '''

class geilihbase:
       def __init__(self):
               self.transport = TBufferedTransport(TSocket("127.0.0.1", "9090"))
               self.transport.open()
               self.protocol = TBinaryProtocol.TBinaryProtocol(self.transport)
               self.client = Hbase.Client(self.protocol)
       def __del__(self):
               self.transport.close()
       def glisttable(self):
               for table in self.client.getTableNames():
                       print table
       def ggetColumnDescriptors(self,table):
               rarr=self.client.getColumnDescriptors(table)
               if rarr:
                       for (k,v) in rarr.items():
                               print "%-20s\t%s" % (k,v)
       def gget(self,table,key,coulmn):
               rarr=self.client.get(table,key,coulmn)
               if rarr:
                       print "%-15s %-20s\t%s" % (rarr[0].timestamp,time.strftime("%Y-%m-%d %H:%M:%S",time.localtime(rarr[0].timestamp/1000)),rarr[0].value)
       def ggetrow(self,table,key):
               rarr=self.client.getRow(table, key)
               if rarr:
                       for (k,v) in rarr[0].columns.items():
                               print "%-20s\t%-15s %-20s\t%s" % (k,v.timestamp,time.strftime("%Y-%m-%d %H:%M:%S",time.localtime(v.timestamp/1000)),v.value)
       def ggetver(self, table, key, coulmn, versions):
               rarr=self.client.getVer(table,key,coulmn, versions);
               if rarr:
                       for row in rarr:
                               print "%-15s %-20s\t%s" % (row.timestamp,time.strftime("%Y-%m-%d %H:%M:%S",time.localtime(row.timestamp/1000)),row.value)

def main(argv):
       tablename=""
       key=""
       coulmn=""
       versions=""
       try:
               opts, args = getopt.getopt(argv, "lht:k:c:v:", ["help","list"])
       except getopt.GetoptError:
               usage()
               sys.exit(2)
       for opt, arg in opts:
               if opt in ("-h", "--help"):
                       usage()
                       sys.exit(0)
               elif opt in ("-l", "--list"):
                       ghbase=geilihbase()
                       ghbase.glisttable()
                       sys.exit(0)
               elif opt == '-t':
                       tablename = arg
               elif opt == '-k':
                       key = arg
               elif opt == '-c':
                       coulmn = arg
               elif opt == '-v':
                       versions = int(arg)
       if ( tablename and key and coulmn and versions ):
               ghbase=geilihbase()
               ghbase.ggetver(tablename, key, coulmn, versions)
               sys.exit(0)
       if (tablename and key and coulmn ):
               ghbase=geilihbase()
               ghbase.gget(tablename, key, coulmn)
               sys.exit(0)
       if (tablename and key ):
               ghbase=geilihbase()
               ghbase.ggetrow(tablename, key)
               sys.exit(0)
       if (tablename ):
               ghbase=geilihbase()
               ghbase.ggetColumnDescriptors(tablename)
               sys.exit(0)
       usage()
       sys.exit(1)

if __name__ == "__main__":
       main(sys.argv[1:])


本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式