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使用matplotlib实现的图像读取、切割裁剪功能示例
Apr 28 Python
Python读取本地文件并解析网页元素的方法
May 21 Python
解决Python3中的中文字符编码的问题
Jul 18 Python
python 循环读取txt文档 并转换成csv的方法
Oct 26 Python
pandas dataframe添加表格框线输出的方法
Feb 08 Python
Python进程间通信 multiProcessing Queue队列实现详解
Sep 23 Python
Python 词典(Dict) 加载与保存示例
Dec 06 Python
opencv 图像滤波(均值,方框,高斯,中值)
Jul 08 Python
python 服务器运行代码报错ModuleNotFoundError的解决办法
Sep 16 Python
python中append函数用法讲解
Dec 11 Python
Python+Appium实现自动抢微信红包
May 21 Python
Python3中最常用的5种线程锁实例总结
Jul 07 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和Shell实现检查SAMBA与NFS Server是否存在
2015/01/07 PHP
利用PHP获取访客IP、地区位置、浏览器及来源页面等信息
2017/06/27 PHP
PHP+fiddler抓包采集微信文章阅读数点赞数的思路详解
2019/12/20 PHP
js中escape对应的C#解码函数 UrlDecode
2012/12/16 Javascript
JS回调函数的应用简单实例
2014/09/17 Javascript
jQuery DateTimePicker 日期和时间插件示例
2017/01/22 Javascript
面试常见的js算法题
2017/03/23 Javascript
基于jQuery实现的Ajax 验证用户名唯一性实例代码
2017/06/28 jQuery
vue2.0 computed 计算list循环后累加值的实例
2018/03/07 Javascript
Angular服务Request异步请求的实例讲解
2018/08/13 Javascript
Vue Cli 3项目使用融云IM实现聊天功能的方法
2019/04/19 Javascript
nodejs搭建本地服务器并访问文件操作示例
2019/05/11 NodeJs
浅谈目前可以使用ES10的5个新特性
2019/06/25 Javascript
vue源码nextTick使用及原理解析
2019/08/13 Javascript
Node.js设置定时任务之node-schedule模块的使用详解
2020/04/28 Javascript
vuex实现购物车功能
2020/06/28 Javascript
python3简单实现微信爬虫
2015/04/09 Python
python搜索算法原理及实例讲解
2020/11/18 Python
如何用Python编写一个电子考勤系统
2021/02/08 Python
HTML5中判断用户是否正在浏览页面的方法
2014/05/03 HTML / CSS
Html5监听手机摇一摇事件的实现
2019/11/07 HTML / CSS
英国最大的电脑零售连锁店集团:PC World
2016/10/10 全球购物
美国购买汽车零件网站:Buy Auto Parts
2018/04/02 全球购物
荷兰演唱会和体育比赛订票网站:viagogo荷兰
2018/04/08 全球购物
亚马逊海外购:亚马逊美国、英国、日本、德国直邮
2021/03/18 全球购物
一封普通求职者的求职信
2013/11/20 职场文书
职业培训师职业生涯规划
2014/02/18 职场文书
心理咨询承诺书
2014/05/20 职场文书
小学生感恩老师演讲稿
2014/08/28 职场文书
2014政府领导班子对照检查材料思想汇报(3篇)
2014/09/26 职场文书
监察建议书
2015/02/04 职场文书
2015重阳节座谈会主持词
2015/07/30 职场文书
世界上超棒的8种逻辑思维
2019/08/06 职场文书
windows下快速安装nginx并配置开机自启动的方法
2021/05/11 Servers
分析MySQL抛出异常的几种常见解决方式
2021/05/18 MySQL
python中filter,map,reduce的作用
2022/06/10 Python