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使用scrapy解析js示例
Jan 23 Python
Python中的exec、eval使用实例
Sep 23 Python
在Python中用split()方法分割字符串的使用介绍
May 20 Python
详解python中asyncio模块
Mar 03 Python
python实现守护进程、守护线程、守护非守护并行
May 05 Python
使用python判断你是青少年还是老年人
Nov 29 Python
基于树莓派的语音对话机器人
Jun 17 Python
Flask框架学习笔记之表单基础介绍与表单提交方式
Aug 12 Python
Windows下Pycharm远程连接虚拟机中Centos下的Python环境(图文教程详解)
Mar 19 Python
Python os库常用操作代码汇总
Nov 03 Python
Python 打印自己设计的字体的实例讲解
Jan 04 Python
Python的轻量级ORM框架peewee使用教程
Feb 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
xml+php动态载入与分页
2006/10/09 PHP
网络资源
2006/10/09 PHP
基于Zend的Captcha机制的应用
2013/05/02 PHP
PHP加密3DES报错 Call to undefined function: mcrypt_module_open() 如何解决
2016/04/17 PHP
php读取XML的常见方法实例总结
2017/04/25 PHP
jquery调用asp.net 页面后台的实现代码
2011/04/27 Javascript
JavaScript mapreduce工作原理简析
2012/11/25 Javascript
jQuery之自动完成组件的深入解析
2013/06/19 Javascript
javascript静态页面传值的三种方法分享
2013/11/12 Javascript
js完美解决IE6不支持position:fixed的bug
2015/04/24 Javascript
jQuery实现文本展开收缩特效
2015/06/03 Javascript
第三章之Bootstrap 表格与按钮功能
2016/04/25 Javascript
JavaScript实现鼠标点击导航栏变色特效
2017/02/08 Javascript
node.js入门学习之url模块
2017/02/25 Javascript
Bootstrap显示与隐藏简单实现代码
2017/03/06 Javascript
Vue.js结合bootstrap实现分页控件
2017/03/10 Javascript
Javascript封装id、class与元素选择器方法示例
2017/03/13 Javascript
3分钟快速搭建nodejs本地服务器方法运行测试html/js
2017/04/01 NodeJs
js实现随机数字字母验证码
2017/06/19 Javascript
JavaScript严格模式下关于this的几种指向详解
2017/07/12 Javascript
JavaScript实现求最大公共子串的方法
2018/02/03 Javascript
vue axios 简单封装以及思考
2018/10/09 Javascript
微信小程序自定义弹窗wcPop插件
2018/11/19 Javascript
[01:04:09]DOTA2-DPC中国联赛 正赛 iG vs VG BO3 第二场 2月2日
2021/03/11 DOTA
详解Python如何获取列表(List)的中位数
2016/08/12 Python
Python爬虫包BeautifulSoup简介与安装(一)
2018/06/17 Python
Python使用__new__()方法为对象分配内存及返回对象的引用示例
2019/09/20 Python
Python使用gluon/mxnet模块实现的mnist手写数字识别功能完整示例
2019/12/18 Python
台湾屈臣氏网路商店:Watsons台湾
2020/12/29 全球购物
优秀民警事迹材料
2014/01/29 职场文书
共产党员公开承诺书范文
2014/03/28 职场文书
团日活动总结
2014/04/28 职场文书
新员工入职感想
2015/08/07 职场文书
2016庆祝教师节新闻稿
2015/11/25 职场文书
Jupyter Notebook内使用argparse报错的解决方案
2021/06/03 Python
JAVA API 实用类 String详解
2021/10/05 Java/Android