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下singleton模式的实现方法
Jul 16 Python
Python性能优化的20条建议
Oct 25 Python
Django中使用group_by的方法
May 26 Python
Python二叉搜索树与双向链表转换实现方法
Apr 29 Python
Python编程中对super函数的正确理解和用法解析
Jul 02 Python
Python爬虫基础之XPath语法与lxml库的用法详解
Sep 13 Python
浅谈pycharm出现卡顿的解决方法
Dec 03 Python
对Python实现累加函数的方法详解
Jan 23 Python
Python之pymysql的使用小结
Jul 01 Python
关于python pycharm中输出的内容不全的解决办法
Jan 10 Python
Django单元测试中Fixtures用法详解
Feb 25 Python
Python监听剪切板实现方法代码实例
Nov 11 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
CakePHP框架Session设置方法分析
2017/02/23 PHP
动态添加js事件实现代码
2009/03/12 Javascript
js调试工具Console命令详解
2014/10/21 Javascript
基于JavaScript实现跳转提示页面
2016/09/24 Javascript
详解vue2.0 使用动态组件实现 Tab 标签页切换效果(vue-cli)
2017/08/30 Javascript
nodejs+mongodb aggregate级联查询操作示例
2018/03/17 NodeJs
小程序实现分类页
2019/07/12 Javascript
layer.open弹层查看缩略图的原图,自适应大小的实例
2019/09/05 Javascript
Nodejs使用archiver-zip-encrypted库加密压缩文件时报错(解决方案)
2019/11/18 NodeJs
es6中new.target的作用和使用场景简单示例分析
2020/03/14 Javascript
vue路由权限校验功能的实现代码
2020/06/07 Javascript
vue或react项目生产环境去掉console.log的操作
2020/09/02 Javascript
python中的闭包用法实例详解
2015/05/05 Python
Django框架中的对象列表视图使用示例
2015/07/21 Python
详解Python Socket网络编程
2016/01/05 Python
Python网络爬虫实例讲解
2016/04/28 Python
python 简单的多线程链接实现代码
2016/08/28 Python
Django中的文件的上传的几种方式
2018/07/23 Python
Python运行不显示DOS窗口的解决方法
2018/10/22 Python
Python 把序列转换为元组的函数tuple方法
2019/06/27 Python
wxPython:python首选的GUI库实例分享
2019/10/05 Python
Python操作SQLite/MySQL/LMDB数据库的方法
2019/11/07 Python
Python高级特性之闭包与装饰器实例详解
2019/11/19 Python
python两种获取剪贴板内容的方法
2020/11/06 Python
从零实现一个自定义html5播放器的示例代码
2017/08/01 HTML / CSS
压铸汽车模型收藏家:Diecastmodelswholesale.com
2016/12/21 全球购物
CHARLES & KEITH澳大利亚官网:新加坡时尚品牌
2019/01/22 全球购物
杰夫·班克斯男士服装网上商店:Jeff Banks
2019/10/24 全球购物
JSF面试题:Jsf中导航的标签是什么
2013/04/20 面试题
移动通信行业实习自我鉴定
2013/09/28 职场文书
临床医师专业个人自我评价
2014/01/08 职场文书
《雾凇》教学反思
2014/02/17 职场文书
报考公务员诚信承诺书
2014/08/29 职场文书
2014年六五普法工作总结
2014/11/25 职场文书
财务个人年度总结范文
2015/02/26 职场文书
Python机器学习之底层实现KNN
2021/06/20 Python