新来的一个工程师不懂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()
分享到:
相关推荐
新来的一个工程师不懂HBase,java不熟,python还行,我建议他那可以考虑用HBase的thrift调用,完成目前的工作。 首先,安装thrift 下载thrift,这里,我用的是thrift-0.7.0-dev.tar.gz 这个版本 tar xzf thrift-...
Python环境下通过thrift操作hbase所需的模块
解压后复制到dist-packages/目录下即可。 具体用法可以查看源码。。。。。。。。。。。。。。。。。。。。。
网上好多Hbase.py都是python2的,各种报错,我提供一种python3的,无报错,欢迎大家下载。
python 连接hbase 打印数据。hbase 的一些源数据未转化
HBase 中文参考指南
hbase-thrift库需要替换的文件 替换项目 C:\ProgramData\Anaconda3\Lib\site-packages\hbase
Hbase.py 和 ttypes.py 用来替换原有的 hbase包里的文件,解决 from hbase import Hbase 报错问题。
非java语言连接hbase只能通过thrift接口, 这个lib便是python连接hbase所必须的(hbase版本小于即可0.98.8)
java调用hbase数据库,完成对hbase常用api的封装和对hbase数据库的增删改查等操作,经测试绝对可用。
利用python3连接hbase,亲测无误,这里分享给大家,欢迎大家下载。
HBase原理及实例
最新的thrift2协议python链接hbase代码,附代码片段,get,put,delete...
结合电信客服项目,将数据存储模块独立成项目,欢迎下载
python3中直接安装hbase-thrift模块时,import会报Except语法错误 将资源解压后的Hbase.py和ttypes.py两个文件替换至site-packages/hbase/目录下即可解决
python3通过thrift连接hbase模块修改版,其中hbase-python3,里面的path,根据实际实际路径修改.
thrift生成好的python hbase库,配合thrift库可直接操作hbase
Python基于Django LayUI HBase的文献数据挖掘系统Python基于Django LayUI HBase的文献数据挖掘系统Python基于Django LayUI HBase的文献数据挖掘系统Python基于Django LayUI HBase的文献数据挖掘系统Python基于Django...