python 调用HBase的简单实例


Posted in Python onDecember 18, 2016

新来的一个工程师不懂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对url格式解析的方法
May 13 Python
Python发送http请求解析返回json的实例
Mar 26 Python
Python解析json时提示“string indices must be integers”问题解决方法
Jul 31 Python
python实现将一维列表转换为多维列表(numpy+reshape)
Nov 29 Python
numpy ndarray 取出满足特定条件的某些行实例
Dec 05 Python
opencv3/C++图像像素操作详解
Dec 10 Python
python中数据库like模糊查询方式
Mar 02 Python
基于python实现地址和经纬度转换
May 19 Python
django rest framework 过滤时间操作
Jul 12 Python
python使用隐式循环快速求和的实现示例
Sep 11 Python
python实现文件分片上传的接口自动化
Nov 19 Python
Python基本的内置数据类型及使用方法
Apr 13 Python
python操作 hbase 数据的方法
Dec 18 #Python
Python合并字典键值并去除重复元素的实例
Dec 18 #Python
python利用matplotlib库绘制饼图的方法示例
Dec 18 #Python
浅谈Python的垃圾回收机制
Dec 17 #Python
谈谈如何手动释放Python的内存
Dec 17 #Python
深入理解NumPy简明教程---数组3(组合)
Dec 17 #Python
深入理解NumPy简明教程---数组2
Dec 17 #Python
You might like
PHP安全编程之加密功能
2006/10/09 PHP
php数组删除元素示例
2014/03/21 PHP
laravel 5异常错误:FatalErrorException in Handler.php line 38的解决
2017/10/12 PHP
Laravel 批量更新多条数据的示例
2017/11/27 PHP
基于php中echo用逗号和用点号的区别详解
2018/01/23 PHP
laravel 操作数据库常用函数的返回值方法
2019/10/11 PHP
jQuery 使用个人心得
2009/02/26 Javascript
js图片延迟加载的实现方法及思路
2013/07/22 Javascript
可自己添加html的伪弹出框实现代码
2013/09/08 Javascript
javaScript对文字按照拼音排序实现代码
2013/12/27 Javascript
原生JavaScript+LESS实现瀑布流
2014/12/12 Javascript
js数组的操作指南
2014/12/28 Javascript
DOM基础教程之模型中的模型节点
2015/01/19 Javascript
封装好的一个万能检测表单的方法
2015/01/21 Javascript
bootstrap table表格客户端分页实例
2017/08/07 Javascript
基于JavaScript实现评论框展开和隐藏功能
2017/08/25 Javascript
微信小程序request请求后台接口php的实例详解
2017/09/20 Javascript
解决vue.js 数据渲染成功仍报错的问题
2018/08/25 Javascript
微信小程序分享功能onShareAppMessage(options)用法分析
2019/04/24 Javascript
判断文字超过2行添加展开按钮,未超过则不显示,溢出部分显示省略号
2019/04/28 Javascript
微信小程序合法域名配置方法
2019/05/06 Javascript
Vue v-bind动态绑定class实例方法
2020/01/15 Javascript
有关vue 开发钉钉 H5 微应用 dd.ready() 不执行问题及快速解决方案
2020/05/09 Javascript
[54:10]完美世界DOTA2联赛PWL S2 Magma vs FTD 第二场 11.29
2020/12/03 DOTA
Python中MYSQLdb出现乱码的解决方法
2014/10/11 Python
总结python实现父类调用两种方法的不同
2017/01/15 Python
python中map()函数的使用方法示例
2017/09/29 Python
pandas 实现字典转换成DataFrame的方法
2018/07/04 Python
python中id函数运行方式
2020/07/03 Python
美国最大的团购网站:Groupon
2016/07/23 全球购物
应届生会计电算化求职信
2013/10/03 职场文书
新郎父亲婚宴答谢词
2014/01/11 职场文书
回门宴答谢词
2014/01/13 职场文书
坚守艰苦奋斗精神坚决反对享乐主义整改措施
2014/09/17 职场文书
2014年高中生自我评价范文
2014/09/26 职场文书
共青团优秀团员申请书(范文)
2019/08/15 职场文书