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利用递归和walk()遍历目录文件的方法示例
Jul 14 Python
django文档学习之applications使用详解
Jan 29 Python
Django使用Celery异步任务队列的使用
Mar 13 Python
python如何让类支持比较运算
Mar 20 Python
pandas创建新Dataframe并添加多行的实例
Apr 08 Python
Python打开文件,将list、numpy数组内容写入txt文件中的方法
Oct 26 Python
Django实现微信小程序的登录验证功能并维护登录态
Jul 04 Python
python调用c++返回带成员指针的类指针实例
Dec 12 Python
keras 如何保存最佳的训练模型
May 25 Python
python 基于opencv 实现一个鼠标绘图小程序
Dec 11 Python
linux centos 7.x 安装 python3.x 替换 python2.x的过程解析
Dec 14 Python
Python的三个重要函数详解
Jan 18 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
一个查看session内容的函数
2006/10/09 PHP
laravel 解决强制跳转 https的问题
2019/10/22 PHP
一段实现页面上的图片延时加载的js代码
2010/02/11 Javascript
控制页面按钮在后台执行期间不重复提交的JS方法
2013/06/24 Javascript
JQuery $.each遍历JavaScript数组对象实例
2014/09/01 Javascript
浅谈JS闭包中的循环绑定处理程序
2014/11/09 Javascript
jQuery焦点图插件SaySlide
2015/12/21 Javascript
AngularJS 执行流程详细介绍
2016/08/18 Javascript
JS实现的自动打字效果示例
2017/03/10 Javascript
原生JS实现左右箭头选择日期实例代码
2017/03/14 Javascript
基于滚动条位置判断的简单实例
2017/12/14 Javascript
angular6.0使用教程之父组件通过url传递id给子组件的方法
2018/06/30 Javascript
JS通过ajax + 多列布局 + 自动加载实现瀑布流效果
2019/05/30 Javascript
vue+element_ui上传文件,并传递额外参数操作
2020/12/05 Vue.js
[02:22:36]《加油!DOTA》总决赛
2014/09/19 DOTA
Django中更新多个对象数据与删除对象的方法
2015/07/17 Python
Python使用Phantomjs截屏网页的方法
2018/05/17 Python
python实现逆序输出一个数字的示例讲解
2018/06/25 Python
Python unittest 简单实现参数化的方法
2018/11/30 Python
Python3.6中Twisted模块安装的问题与解决
2019/04/15 Python
python实现布隆过滤器及原理解析
2019/12/08 Python
tensorflow模型继续训练 fineturn实例
2020/01/21 Python
关于tensorflow softmax函数用法解析
2020/06/30 Python
Calphalon美国官网:美国顶级锅具品牌
2020/02/05 全球购物
L’Artisan Parfumeur官网:法国香水品牌
2020/08/11 全球购物
高二美术教学反思
2014/01/14 职场文书
我的梦中国梦演讲稿
2014/04/23 职场文书
态度决定一切演讲稿
2014/05/20 职场文书
市场推广策划方案
2014/06/02 职场文书
停电放假通知
2015/04/14 职场文书
2015年度环卫处工作总结
2015/07/24 职场文书
Python绘制分类图的方法
2021/04/20 Python
总结高并发下Nginx性能如何优化
2021/11/01 Servers
python自动化测试通过日志3分钟定位bug
2021/11/20 Python
AngularJS实现多级下拉框
2022/03/25 Javascript
详解ZABBIX监控ESXI主机的问题
2022/06/21 Servers