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实现简单的计时器功能函数
Mar 14 Python
在python中按照特定顺序访问字典的方法详解
Dec 14 Python
基于Python实现迪杰斯特拉和弗洛伊德算法
May 27 Python
详解重置Django migration的常见方式
Feb 15 Python
Python利用lxml模块爬取豆瓣读书排行榜的方法与分析
Apr 15 Python
Python+selenium点击网页上指定坐标的实例
Jul 05 Python
python IDLE 背景以及字体大小的修改方法
Jul 12 Python
python爬虫 execjs安装配置及使用
Jul 30 Python
Python使用python-docx读写word文档
Aug 26 Python
详解Python中字符串前“b”,“r”,“u”,“f”的作用
Dec 18 Python
Django全局启用登陆验证login_required的方法
Jun 02 Python
利用Python如何制作贪吃蛇及AI版贪吃蛇详解
Aug 24 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中将图片gif,jpg或mysql longblob或blob字段值转换成16进制字符串
2011/08/23 PHP
基于MySQL体系结构的分析
2013/05/02 PHP
解析php中session的实现原理以及大网站应用应注意的问题
2013/06/17 PHP
php stripslashes和addslashes的区别
2014/02/03 PHP
浅谈php错误提示及查错方法
2015/07/14 PHP
PHP小偷程序的设计与实现方法详解
2016/10/15 PHP
php中通过eval实现字符串格式的计算公式
2017/03/18 PHP
jquery中的sortable排序之后的保存状态的解决方法
2010/01/28 Javascript
在javascript中执行任意html代码的方法示例解读
2013/12/25 Javascript
js仿支付宝填写支付密码效果实现多方框输入密码
2016/03/09 Javascript
详解利用exif.js解决ios手机上传竖拍照片旋转90度问题
2016/11/04 Javascript
create-react-app构建项目慢的解决方法
2018/03/14 Javascript
JS实现鼠标拖拽盒子移动及右键点击盒子消失效果示例
2019/01/29 Javascript
微信小程序配置服务器提示验证token失败的解决方法
2019/04/03 Javascript
Vue 中文本内容超出规定行数后展开收起的处理的实现方法
2019/04/28 Javascript
ant-design-vue中tree增删改的操作方法
2020/11/03 Javascript
[01:28]一分钟告诉你DOTA2 TI9不朽宝藏Ⅱ中有什么!
2019/07/09 DOTA
python实现kmp算法的实例代码
2019/04/03 Python
wxPython窗体拆分布局基础组件
2019/11/19 Python
利用python读取YUV文件 转RGB 8bit/10bit通用
2019/12/09 Python
pytorch 实现tensor与numpy数组转换
2019/12/27 Python
python如何实现不可变字典inmutabledict
2020/01/08 Python
Python中url标签使用知识点总结
2020/01/16 Python
python 实现PIL模块在图片画线写字
2020/05/16 Python
python 如何将office文件转换为PDF
2020/09/22 Python
python实现不同数据库间数据同步功能
2021/02/25 Python
Ralph Lauren拉夫·劳伦美国官网:带有浓郁美国气息的高品味时装品牌
2017/11/01 全球购物
优质服务口号
2014/06/11 职场文书
2014年工作总结及2015工作计划
2014/12/12 职场文书
2015年教师个人业务工作总结
2015/10/23 职场文书
合作协议书格式范本
2016/03/21 职场文书
求职信如何撰写?
2019/05/22 职场文书
读鲁迅先生的经典名言
2019/08/20 职场文书
用CSS3画一个爱心
2021/04/27 HTML / CSS
Mysql实现主从配置和多主多从配置
2021/06/02 MySQL
MongoDB支持的数据类型
2022/04/11 MongoDB