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数据库示例(做增删改操作)
Dec 31 Python
python基础教程之类class定义使用方法
Feb 20 Python
Python迭代器和生成器介绍
Mar 06 Python
用Python进行基础的函数式编程的教程
Mar 31 Python
python调用百度语音REST API
Aug 30 Python
对python dataframe逻辑取值的方法详解
Jan 30 Python
详解Python传入参数的几种方法
May 16 Python
从多个tfrecord文件中无限读取文件的例子
Feb 17 Python
django配置app中的静态文件步骤
Mar 27 Python
Django实现列表页商品数据返回教程
Apr 03 Python
python调用有道智云API实现文件批量翻译
Oct 10 Python
刚学完怎么用Python实现定时任务,转头就跑去撩妹!
Jun 05 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 调用远程url的六种方法小结
2009/11/02 PHP
PHP用mysql数据库存储session的代码
2010/03/05 PHP
php自动加载机制的深入分析
2013/06/08 PHP
解析php中获取系统信息的方法
2013/06/25 PHP
ThinkPHP框架搭建及常见问题(XAMPP安装失败、Apache/MySQL启动失败)
2016/04/15 PHP
Laravel的throttle中间件失效问题解决方法
2016/10/09 PHP
老生常谈php中传统验证与thinkphp框架(必看篇)
2017/06/10 PHP
Node.js实战 建立简单的Web服务器
2012/03/08 Javascript
如何用ajax来创建一个XMLHttpRequest对象
2012/12/10 Javascript
jQuery 1.9.1源码分析系列(十五)之动画处理
2015/12/03 Javascript
JavaScript中的函数(二)
2015/12/23 Javascript
微信小程序实现图片自适应(支持多图)
2017/01/25 Javascript
jQuery实现导航回弹效果
2017/02/27 Javascript
详解angular中通过$location获取路径(参数)的写法
2017/03/21 Javascript
Vue 2.0 服务端渲染入门介绍
2017/03/29 Javascript
详解Vue2.0之去掉组件click事件的native修饰
2017/04/20 Javascript
angularJS模态框$modal实例代码
2017/05/27 Javascript
Vue.js更改调试地址端口号的实例
2018/09/19 Javascript
使用axios请求时,发送formData请求的示例
2019/10/29 Javascript
js实现盒子拖拽动画效果
2020/08/09 Javascript
vue实现广告栏上下滚动效果
2020/11/26 Vue.js
[00:43]魔廷新尊——痛苦女王至宝捆绑包
2020/06/12 DOTA
python实现上传样本到virustotal并查询扫描信息的方法
2014/10/05 Python
python编写分类决策树的代码
2017/12/21 Python
浅谈python可视化包Bokeh
2018/02/07 Python
详解H5本地储存Web Storage
2017/07/03 HTML / CSS
怎样建立和理解非常复杂的声明?例如定义一个包含N 个指向返回 指向字符的指针的函数的指针的数组?
2013/03/19 面试题
对于没有初始化的变量的初始值可以作怎样的假定
2014/10/12 面试题
解释i节点在文件系统中的作用
2013/11/26 面试题
写给爸爸的道歉信
2014/01/15 职场文书
2014乡镇“三八”国际劳动妇女节活动总结
2014/03/01 职场文书
读书月活动方案
2014/05/22 职场文书
校车安全责任书
2014/08/25 职场文书
2015年植树节活动总结
2015/02/06 职场文书
Python使用socket去实现TCP客户端和TCP服务端
2022/04/12 Python
vue ant design 封装弹窗表单的使用
2022/06/01 Vue.js