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 相关文章推荐
Python3遍历目录树实现方法
May 22 Python
简单介绍使用Python解析并修改XML文档的方法
Oct 15 Python
详解Python中表达式i += x与i = i + x是否等价
Feb 08 Python
Python 列表(List) 的三种遍历方法实例 详解
Apr 15 Python
python安装Scrapy图文教程
Aug 14 Python
使用python 爬虫抓站的一些技巧总结
Jan 10 Python
Python3中bytes类型转换为str类型
Sep 27 Python
如何在Django配置文件里配置session链接
Aug 06 Python
numpy.random.shuffle打乱顺序函数的实现
Sep 10 Python
keras 实现轻量级网络ShuffleNet教程
Jun 19 Python
Python使用pyexecjs代码案例解析
Jul 13 Python
Python获取江苏疫情实时数据及爬虫分析
Aug 02 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 编写大型网站问题集
2010/05/07 PHP
解析php php_openssl.dll的作用
2013/07/01 PHP
PHP中单引号与双引号的区别分析
2014/08/19 PHP
Codeigniter的一些优秀特性总结
2015/01/21 PHP
几个常用的JavaScript字符串处理函数 - split()、join()、substring()和indexOf()
2009/06/02 Javascript
快速解决jQuery与其他库冲突的方法介绍
2014/01/02 Javascript
jQuery+ajax实现无刷新级联菜单示例
2015/05/21 Javascript
js支持键盘控制的左右切换立体式图片轮播效果代码分享
2015/08/26 Javascript
jquery实现全选、反选、获得所有选中的checkbox
2020/09/13 Javascript
基于JavaScript实现手机短信按钮倒计时(超简单)
2015/12/30 Javascript
node.js自动上传ftp的脚本分享
2018/06/16 Javascript
vue-cli3脚手架的配置及使用教程
2018/08/28 Javascript
从vue源码解析Vue.set()和this.$set()
2018/08/30 Javascript
详解如何在vue项目中使用eslint+prettier格式化代码
2018/11/10 Javascript
JavaScript对象属性操作实例解析
2020/02/04 Javascript
easyUI使用分页过滤器对数据进行分页操作实例分析
2020/06/01 Javascript
vue3.0中友好使用antdv示例详解
2021/01/05 Vue.js
[42:24]完美世界DOTA2联赛PWL S2 LBZS vs FTD.C 第三场 11.27
2020/12/01 DOTA
对python csv模块配置分隔符和引用符详解
2018/12/12 Python
python pytest进阶之conftest.py详解
2019/06/27 Python
Django 对IP访问频率进行限制的例子
2019/08/30 Python
python jenkins 打包构建代码的示例代码
2019/11/29 Python
Tensorflow轻松实现XOR运算的方式
2020/02/03 Python
Python 实现平台类游戏添加跳跃功能
2020/03/27 Python
Bugatchi官方网站:男士服装在线
2019/04/10 全球购物
Bonami斯洛伐克:购买家具和家居饰品
2019/07/02 全球购物
介绍一下sql server的安全性
2014/08/10 面试题
个人委托书怎么写
2014/09/17 职场文书
2014年民主评议党员个人总结
2014/09/24 职场文书
八月一日观后感
2015/06/10 职场文书
2016年寒假政治学习心得体会
2015/10/09 职场文书
小学班主任心得体会
2016/01/07 职场文书
2019年鼓励无偿献血倡议书
2019/09/17 职场文书
62句有关感恩节文案(推荐收藏)
2019/11/28 职场文书
红灯733-1型14管5波段半导体收音机
2021/04/22 无线电
漫画《尖帽子的魔法工坊》宣布动画化
2022/04/06 日漫