1.看不同语言对hbase的thrift访问demo,可以参考examples/thrift/DemClient.*,有c++,java,php,pl,py,rb等多种语言
2.使用python访问hbase需要借助thrift的帮助,首先通过 --gen生成python的hbase的thrift脚本
使用命令:
cd $HBASE_HOME
thrift --gen py /src/main/resources/org/apache/hadoop/hbase/thrift/Hbase.thrift
这样在当前目录就生成了gen-py目录
Hbase.py 中定义了一些HbaseClient可以使用的方法
ttypes.py中定义了HbaseClient传输的数据类型
将生成的hbase目录copy到python的包下
cp -r hbase /usr/lib/python2.4/site-packages/
3。启动hbase和thrift服务
./bin/start-hbase.sh
./bin/hbase-daemon.sh start thrift
现在我们就可以用python来和hbase通信了
#-*-coding:utf-8 -*-
#!/usr/bin/python
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 HbaseWriter:
"""
IP地址
端口
表名
"""
def __init__(self,address,port,table='user'):
self.tableName = table
#建立与hbase的连接
self.transport=TTransport.TBufferedTransport(TSocket.TSocket(address,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:
print "not in tables"
self.__createTable()
self.write("hell,babay!!!")
self.read()
#关闭
def __del__(self):
self.transport.close()
#建表
def __createTable(self):
col1 = ColumnDescriptor(name="person:",maxVersions=1)
col2 = ColumnDescriptor(name="contents:",maxVersions=1)
col3 = ColumnDescriptor(name="info:",maxVersions=1)
self.client.createTable(self.tableName,[col1,col2,col3])
def write(self,content):
row="abc"
mutations=[Mutation(column="person:",value=content),Mutation(column="info:",value=content)]
self.client.mutateRow(self.tableName,row,mutations)
def read(self):
scannerId = self.client.scannerOpen(self.tableName,"",["contents:",])
while True:
try:
result = self.client.scannerGet(scannerId)
except:
break
contents = result.columns["contents:"].value
#print contents
self.client.scannerClose(scannerId)
if __name__ == "__main__":
client = HbaseWriter("192.168.239.135","9090","person")
我们看下使用thrift生成的代码中都提供了那些方法
提供的方法有:
void enableTable(Bytes tableName)
enable表
void disableTable(Bytes tableName)
disable表
bool isTableEnabled(Bytes tableName)
查看表状态
void compact(Bytes tableNameOrRegionName)
void majorCompact(Bytes tableNameOrRegionName)
getTableNames()
getColumnDescriptors(Text tableName)
getTableRegions(Text tableName)
void createTable(Text tableName, columnFamilies)
void deleteTable(Text tableName)
get(Text tableName, Text row, Text column)
getVer(Text tableName, Text row, Text column, i32 numVersions)
getVerTs(Text tableName, Text row, Text column, i64 timestamp, i32 numVersions)
getRow(Text tableName, Text row)
getRowWithColumns(Text tableName, Text row, columns)
getRowTs(Text tableName, Text row, i64 timestamp)
getRowWithColumnsTs(Text tableName, Text row, columns, i64 timestamp)
getRows(Text tableName, rows)
getRowsWithColumns(Text tableName, rows, columns)
getRowsTs(Text tableName, rows, i64 timestamp)
getRowsWithColumnsTs(Text tableName, rows, columns, i64 timestamp)
void mutateRow(Text tableName, Text row, mutations)
void mutateRowTs(Text tableName, Text row, mutations, i64 timestamp)
void mutateRows(Text tableName, rowBatches)
void mutateRowsTs(Text tableName, rowBatches, i64 timestamp)
i64 atomicIncrement(Text tableName, Text row, Text column, i64 value)
void deleteAll(Text tableName, Text row, Text column)
void deleteAllTs(Text tableName, Text row, Text column, i64 timestamp)
void deleteAllRow(Text tableName, Text row)
void deleteAllRowTs(Text tableName, Text row, i64 timestamp)
ScannerID scannerOpenWithScan(Text tableName, TScan scan)
ScannerID scannerOpen(Text tableName, Text startRow, columns)
ScannerID scannerOpenWithStop(Text tableName, Text startRow, Text stopRow, columns)
ScannerID scannerOpenWithPrefix(Text tableName, Text startAndPrefix, columns)
ScannerID scannerOpenTs(Text tableName, Text startRow, columns, i64 timestamp)
ScannerID scannerOpenWithStopTs(Text tableName, Text startRow, Text stopRow, columns, i64 timestamp)
scannerGet(ScannerID id)
scannerGetList(ScannerID id, i32 nbRows)
void scannerClose(ScannerID id)
不当之处,请指正
分享到:
相关推荐
下面,我们将介绍如何使用 Python 通过 Thrift 访问 HBase。 首先,我们需要了解 HBase 的表结构。HBase 的表结构主要包括行键(Row Key)、列族(Column Family)和时间戳三个部分。行键是 HBase 中每个单元格的...
python连接hbase需要用到hbase-thirft类库,但是hbase-thirft只在python2下能正常使用,如果在python3下,会报错,主要有一下几个错误 except IOError, io: SyntaxError: invalid syntax ModuleNotFoundError: No ...
Python Thrift2与HBase的交互是大数据领域中常见的操作,尤其在分布式系统中,为了高效地访问HBase存储的数据,开发者通常会采用Thrift2作为通信协议。Thrift是一种跨语言的服务框架,它允许不同编程语言之间的高效...
python3 使用 thrift 操作hbase 安装hbase-thirft后有一个Hbase报错 使用这个修改完成的Hbase类替换掉原来的Hbase类问题全部解决 主要是因为python版本兼容性带来的问题
python3通过thrift连接hbase模块修改版,其中hbase-python3,里面的path,根据实际实际路径修改.
通过以上步骤,用户可以在Linux或Windows环境下配置好Thrift和HBase的C++客户端,从而能够利用C++语言访问和操作HBase数据库。这个过程涉及到的技能包括Linux和Windows系统管理、编译工具的使用、C++编程以及对...
在本案例中,"thrift1 查询hbase"是指使用Python通过Thrift1接口来与HBase进行交互,实现数据的查询操作。下面将详细讲解这个过程。 1. **Thrift接口**:Thrift提供了一种序列化和RPC(远程过程调用)机制,允许...
这篇文章主要讲解了如何使用Python 3.7版本通过Thrift接口操作HBase数据库。HBase是一个分布式的、面向列的开源数据库,它是Apache的Hadoop项目的子项目。HBase具有非结构化数据存储的特点,其基于列的存储模式和key...
### Python 利用 Thrift 服务读取 HBase 数据的方法...总之,Python 结合 Thrift 服务为 HBase 提供了一个强大的访问工具,能够极大地提高开发效率和数据处理能力。希望本文能为你在实际项目中的应用提供有用的指导。
在HBase和Thrift的结合中,Python可以作为客户端来访问和操作HBase中的数据。 **gen-py** 是Thrift编译器生成的Python代码目录,包含了服务接口定义和必要的数据结构。当你使用Thrift IDL文件定义服务和数据类型后...
在使用Python访问HBase之前,我们需要安装必要的Python库。主要的依赖库包括`happybase`,它是Python的HBase Thrift客户端。你可以使用pip进行安装: ``` pip install happybase ``` 2. **连接HBase** 连接...
3. **编写Java代码**:使用生成的Java客户端代码,创建HBase连接,实例化Thrift客户端,然后调用其提供的方法来访问HBase表。通常包括以下步骤: - 连接Thrift服务器:通过`TSocket`或`TFramedTransport`建立与...
在Python环境中,与HBase进行交互通常...了解以上知识后,你就可以在Python环境下顺利地使用Thrift来操作HBase了。在开发过程中,记得根据具体需求选择合适的数据模型和操作策略,以充分利用HBase的分布式存储能力。
thrift生成好的python hbase库,配合thrift库可直接操作hbase
2. **ttypes.py**:TTYPES代表Thrift Types,HBase使用Apache Thrift作为其跨语言通信协议。ttypes.py文件是 Thrift编译后的Python接口定义,它包含了HBase服务的结构体和方法声明,这些结构体定义了客户端和服务端...
在使用Thrift从Python与HBase交互时,虽然可以完全不使用Java和JVM,但是用户需要了解Thrift的基本概念和操作方式。Thrift不仅是一个工具集,也是一套跨语言的服务生成工具,它需要用户先定义服务接口和对象,然后...