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 26 Python
python模拟enum枚举类型的方法小结
Apr 30 Python
简述Python中的进程、线程、协程
Mar 18 Python
Python内置模块turtle绘图详解
Dec 09 Python
Python爬豆瓣电影实例
Feb 23 Python
浅析python参数的知识点
Dec 10 Python
Python网络爬虫之爬取微博热搜
Apr 18 Python
Python散点图与折线图绘制过程解析
Nov 30 Python
Python实现微信好友的数据分析
Dec 16 Python
Python日期格式和字符串格式相互转换的方法
Feb 18 Python
教你怎么用python爬取爱奇艺热门电影
May 20 Python
Django中celery的使用项目实例
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编写注册后Email激活验证的实例代码
2013/03/11 PHP
PHP使用Alexa API获取网站的Alexa排名例子
2014/06/12 PHP
PHP里的单例类写法实例
2015/06/25 PHP
PHP实现的只保留字符串首尾字符功能示例【隐藏部分字符串】
2019/03/11 PHP
Firefox+FireBug使JQuery的学习更加轻松愉快
2010/01/01 Javascript
jquery 打开窗口返回值实现代码
2010/03/04 Javascript
利用JS自动打开页面上链接的实现代码
2011/09/25 Javascript
JavaScript函数的4种调用方法详解
2014/04/22 Javascript
探索angularjs+requirejs全面实现按需加载的套路
2016/02/26 Javascript
js接收并转化Java中的数组对象的方法
2016/08/11 Javascript
Vue概念及常见命令介绍(1)
2016/12/08 Javascript
浅谈ECMAScript6新特性之let、const
2017/08/02 Javascript
JS随机数产生代码分享
2018/02/24 Javascript
解决Vue.js 2.0 有时双向绑定img src属性失败的问题
2018/03/14 Javascript
jQuery实现checkbox全选、反选及删除等操作的方法详解
2019/08/02 jQuery
简述ES6新增关键字let与var的区别
2019/08/23 Javascript
js对象数组和对象的使用实例详解
2019/08/27 Javascript
40行代码把Vue3的响应式集成进React做状态管理
2020/05/20 Javascript
vue 使用lodash实现对象数组深拷贝操作
2020/09/10 Javascript
在vue中动态修改css其中一个属性值操作
2020/12/07 Vue.js
[50:17]Newbee vs Serenity 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/18 DOTA
web.py中调用文件夹内模板的方法
2014/08/26 Python
Python可跨平台实现获取按键的方法
2015/03/05 Python
Ruby使用eventmachine为HTTP服务器添加文件下载功能
2016/04/20 Python
python爬虫获取淘宝天猫商品详细参数
2020/06/23 Python
python 实现矩阵按对角线打印
2019/11/29 Python
基于Python的接口自动化unittest测试框架和ddt数据驱动详解
2021/01/27 Python
HTML5 embed标签定义和用法详解
2014/05/09 HTML / CSS
意大利在线眼镜精品店:Ottica Lipari
2019/11/11 全球购物
疾病防治方案
2014/05/31 职场文书
英语教师求职信
2014/06/16 职场文书
Nginx配置之实现多台服务器负载均衡
2021/08/02 Servers
详解MySql中InnoDB存储引擎中的各种锁
2022/02/12 MySQL
HTML常用标签超详细整理
2022/03/19 HTML / CSS
JavaScript模拟实现网易云轮播效果
2022/04/04 Javascript
MySQL运行报错:“Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggre”解决方法
2022/06/14 MySQL