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字符串连接方式汇总
Aug 21 Python
Python中集合类型(set)学习小结
Jan 28 Python
python实现TCP服务器端与客户端的方法详解
Apr 30 Python
利用Python的Django框架生成PDF文件的教程
Jul 22 Python
Python中在for循环中嵌套使用if和else语句的技巧
Jun 20 Python
Python列出一个文件夹及其子目录的所有文件
Jun 30 Python
如何将python中的List转化成dictionary
Aug 15 Python
Django1.7+python 2.78+pycharm配置mysql数据库
Oct 09 Python
python实现监控某个服务 服务崩溃即发送邮件报告
Jun 21 Python
python 定时器,实现每天凌晨3点执行的方法
Feb 20 Python
谈一谈数组拼接tf.concat()和np.concatenate()的区别
Feb 07 Python
Python列表推导式实现代码实例
Sep 09 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中计算时间差的几种方法
2009/12/31 PHP
php 智能404跳转代码,适合换域名没改变目录的网站
2010/06/04 PHP
如何批量替换相对地址为绝对地址(利用bat批处理实现)
2013/05/27 PHP
php jquery 多文件上传简单实例
2013/12/23 PHP
ThinkPHP控制器里javascript代码不能执行的解决方法
2014/11/22 PHP
php中in_array函数用法探究
2014/11/25 PHP
PHP结合Mysql数据库实现留言板功能
2016/03/04 PHP
PHP单例模式是什么 php实现单例模式的方法
2016/05/14 PHP
thinkphp3.x自定义Action、Model及View的简单实现方法
2016/05/19 PHP
JQuery UI DatePicker中z-index默认为1的解决办法
2010/09/28 Javascript
为jQuery增加join方法的实现代码
2010/11/28 Javascript
利用jQuery插件扩展识别浏览器内核与外壳的类型和版本的实现代码
2011/10/22 Javascript
中止javascript执行的方法
2014/02/14 Javascript
jQuery实现仿路边灯箱广告图片轮播效果
2015/04/15 Javascript
详解AngularJS中的依赖注入机制
2015/06/17 Javascript
asp.net+jquery.form实现图片异步上传的方法(附jquery.form.js下载)
2016/05/05 Javascript
js实现常用排序算法
2016/08/09 Javascript
JS中BOM相关知识点总结(必看篇)
2016/11/22 Javascript
Javascript 制作图形验证码实例详解
2016/12/22 Javascript
js实现tab选项卡切换功能
2017/01/13 Javascript
微信小程序 跳转传参数与传对象详解及实例代码
2017/03/14 Javascript
详解nodejs微信公众号开发——1.接入微信公众号
2017/04/10 NodeJs
js实现放大镜特效
2017/05/18 Javascript
Ionic学习日记实现验证码倒计时
2018/02/08 Javascript
深入解析vue 源码目录及构建过程分析
2019/04/24 Javascript
关于Django外键赋值问题详解
2017/08/13 Python
python中set()函数简介及实例解析
2018/01/09 Python
Python实现PS图像调整之对比度调整功能示例
2018/01/26 Python
python数据库编程 Mysql实现通讯录
2020/03/27 Python
python3 通过 pybind11 使用Eigen加速代码的步骤详解
2020/12/07 Python
Canvas globalCompositeOperation
2018/12/18 HTML / CSS
美国眼镜网站:LensCrafters
2020/01/19 全球购物
小学少先队辅导员述职报告
2015/01/10 职场文书
2016党校学习心得体会范文
2016/01/07 职场文书
用人单位的规章制度,怎样制定才是有效的?
2019/07/09 职场文书
python实现简单聊天功能
2021/07/07 Python