python 调用HBase的简单实例

yipeiwu_com7年前Python基础

新来的一个工程师不懂HBase,java不熟,python还行,我建议他那可以考虑用HBase的thrift调用,完成目前的工作。

首先,安装thrift

下载thrift,这里,我用的是thrift-0.7.0-dev.tar.gz 这个版本

tar xzf thrift-0.7.0-dev.tar.gz
cd thrift-0.7.0-dev
sudo ./configure --with-cpp=no --with-ruby=no
sudo make
sudo make install

然后,到HBase的源码包里,找到

src/main/resources/org/apache/hadoop/hbase/thrift/

执行

thrift --gen py Hbase.thrift
mv gen-py/hbase/ /usr/lib/python2.4/site-packages/ (根据python版本可能有不同)

我这里写了些调用的脚本,供大家参考

from unittest import TestCase, main
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 ColumnDescriptor, Mutation, BatchMutation
class HBaseTester:

  def __init__(self, netloc, port, table="staftesttable"):
    self.tableName = table

    self.transport = TTransport.TBufferedTransport(
      TSocket.TSocket(netloc, port))
    self.protocol = TBinaryProtocol.TBinaryProtocol(self.transport)
    self.client = Hbase.Client(self.protocol)
    self.transport.open()

    tables = self.client.getTableNames()
    if self.tableName not in tables:
      self.__createTable()

  def __del__(self):
    self.transport.close()

  def __createTable(self):
    name = ColumnDescriptor(name='name')
    foo = ColumnDescriptor(name='foo')

    self.client.createTable(self.tableName,
                [name,foo])
  
  def put(self,key,name,foo):
    name = Mutation(column="name:v", value=name)
    foo = Mutation(column="foo:v",value=foo)
    
    self.client.mutateRow(self.tablename,key,[name,foo])
  
  def scanner(self,column):
    scanner = client.scannerOpen(self.tablename,"",[column])
				r = client.scannerGet(scanner)
				result= []
    while r:
     print r[0]
     result.append(r[0])
     r = client.scannerGet(scanner)
    print "Scanner finished"
    return result
   
  
    
    
    
     
class TestHBaseTester(TestCase):
  
  def setUp(self):
    self.writer = HBaseTester("localhost", 9090)

  def tearDown(self):
    name = self.writer.tableName
    client = self.writer.client
    client.disableTable(name)
    client.deleteTable(name)


  def testCreate(self):
    tableName = self.writer.tableName
    client = self.writer.client
    self.assertTrue(self.writer.tableName in client.getTableNames())
    columns =['name:','foo:']
    for i in client.getColumnDescriptors(tableName):
      self.assertTrue(i in columns)
      
  def testPut(self):
    self.writer.put("r1","n1","f1")
    self.writer.put("r2","n2","f2")
    self.writer.put("r3","n3","")
    self.writer.scanner("name:") 
    
if __name__ == "__main__":
  main()

以上这篇python 调用HBase的简单实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持【听图阁-专注于Python设计】。

相关文章

从零开始学Python第八周:详解网络编程基础(socket)

一,Socket编程 (1)Socket方法介绍 Socket是网络编程的一个抽象概念。通常我们用一个Socket表示“打开了一个网络链接“,而打开一个Socket需要知道目标计...

python 使用sys.stdin和fileinput读入标准输入的方法

1、使用sys.stdin 读取标准输入 [root@c6-ansible-20 script]# cat demo02.py #! /usr/bin/env python fro...

如何利用Pyecharts可视化微信好友

如何利用Pyecharts可视化微信好友

前言 最近在研究 pyecharts  的用法,它是 python 的一个可视化工具,然后就想着结合微信来一起玩 不多说,直接看效果: 环境配置 pip ins...

Python实现读取字符串按列分配后按行输出示例

本文实例讲述了Python实现读取字符串按列分配后按行输出。分享给大家供大家参考,具体如下: 问题: 输入一个字符串和一个数字,数字代表分为几行,需要按照给定的列存储方法存储下来之后按行...

Python实现定时精度可调节的定时器

本文实例为大家分享了Python实现定时精度可调节的定时器,供大家参考,具体内容如下 # -* coding: utf-8 -*- import sys import os...