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备份文件以及mysql数据库的脚本代码
Jun 10 Python
Python面向对象之类和对象属性的增删改查操作示例
Dec 14 Python
利用python将图片版PDF转文字版PDF
May 03 Python
解决Python正则表达式匹配反斜杠''\''问题
Jul 17 Python
python中eval与int的区别浅析
Aug 11 Python
Django实现分页显示效果
Oct 31 Python
pyinstaller打包程序exe踩过的坑
Nov 19 Python
Python3如何对urllib和urllib2进行重构
Nov 25 Python
关于Python3 lambda函数的深入浅出
Nov 27 Python
python numpy数组中的复制知识解析
Feb 03 Python
你需要掌握的20个Python常用技巧
Feb 28 Python
Pandas实现DataFrame的简单运算、统计与排序
Mar 31 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实现多服务器共享SESSION数据的方法
2007/03/16 PHP
ThinkPHP控制器详解
2015/07/27 PHP
PHP 生成微信红包代码简单
2016/03/25 PHP
详解Yaf框架PHPUnit集成测试方法
2017/12/27 PHP
基于jquery的网页SELECT下拉框美化代码
2010/10/28 Javascript
jQuery$命名冲突怎么办如何解决
2014/01/16 Javascript
自定义jquery模态窗口插件无法在顶层窗口显示问题
2014/05/29 Javascript
javascript使用正则控制input输入框允许输入的值方法大全
2014/06/19 Javascript
jquery获取html元素的绝对位置和相对位置的方法
2014/06/20 Javascript
JavaScript 学习笔记之语句
2015/01/14 Javascript
jQuery幻灯片特效代码分享--鼠标滑过按钮时切换(2)
2020/11/18 Javascript
详解JavaScript基于面向对象之继承实例
2015/12/16 Javascript
全面解析多种Bootstrap图片轮播效果
2016/05/27 Javascript
jQuery实现手势解锁密码特效
2017/08/14 jQuery
Angular4学习笔记之根模块与Ng模块
2017/09/09 Javascript
bootstrap fileinput插件实现预览上传照片功能
2018/01/23 Javascript
nodeJS模块简单用法示例
2018/04/21 NodeJs
9102年webpack4搭建vue项目的方法步骤
2019/02/20 Javascript
Angular8基础应用之表单及其验证
2019/08/11 Javascript
javascript事件循环event loop的简单模型解释与应用分析
2020/03/14 Javascript
JavaScript 闭包的使用场景
2020/09/17 Javascript
Python中使用装饰器和元编程实现结构体类实例
2015/01/28 Python
python3 读取Excel表格中的数据
2018/10/16 Python
python使用xlrd模块读取xlsx文件中的ip方法
2019/01/11 Python
说说如何遍历Python列表的方法示例
2019/02/11 Python
详解pytorch 0.4.0迁移指南
2019/06/16 Python
三个python爬虫项目实例代码
2019/12/28 Python
Django Channel实时推送与聊天的示例代码
2020/04/30 Python
Kiwi.com中国:找到特价机票并发现新目的地
2019/10/27 全球购物
经销商订货会主持词
2014/03/27 职场文书
创建无烟单位实施方案
2014/03/29 职场文书
写得不错的求职信范文
2014/07/11 职场文书
高三毕业评语
2014/12/31 职场文书
基层党支部承诺书
2015/04/30 职场文书
2016春季田径运动会广播稿
2015/12/21 职场文书
MySQL 使用索引扫描进行排序
2021/06/20 MySQL