环境配置
1、 安装thrift
按照官网http://thrift.apache.org/要求及步骤配置安装thrift
2、 取出Hbase文件中的Hbase.thrift文件,是用thrift--gen <language> <Thrift filename>产生所需的cpp文件,将gen_cpp文件复制到工程目录下。其中Hbase.cpp是CPP版的thrift文件中的函数,Hbase_types.cpp是CPP版的thrift文件中的结构。
3、 Hbase启动thrift服务./bin/hbase-daemon.sh start thrift 默认监听地址9090
以上步骤做好之后就可使用C++连接hbase并对其中数据库进行操作了
操作步骤
1、 创建连接
boost::shared_ptr<TTransport>socket(new TSocket("host",port(int)));
boost::shared_ptr<TTransport>transport(new TBufferedTransport(socket));
boost::shared_ptr<TProtocol>protocol(new TBinaryProtocol(transport));
HbaseClient client(protocol);
transport->open(); 失败返回0并抛出TException错误
2、 连接成功后,可以通过client调用Hbase.thrift中定义的函数对hbase进行操作
3、 断开连接
transport->close() 失败抛出TException错误
HbaseClient类中定义的结构及函数
这些结构和函数都是在Hbase.thrift中定义,C++定义是由thrift读取Hbase.thrift生成的并存放在生成的cpp文件中,若要是用需在工程中包含这些文件
一、 异常
前三个异常类都包含一个string成员message,不同的函数出错会抛出不同的错误
1、 IOError 操作过程中的一般性错误
2、 IllegalArgument 函数传入参数错误
3、 AlreadyExists 如建表表已存在
4、 TException thrift服务的异常类,前三个都是Hbase.thrift中定义,生成cpp文件的定义中前三个都是都是这个异常类的子类
二、 数据类(等于多少表示默认值)
1、 TCell:
1: Stringvalue; 一般是对应列数据
2: I64timestame;
2、 ColumnDescriptor:包含数据库中表的某个列族的信息
1:string name,
2:i32 maxVersions = 3,
3:string compression = "NONE",
4:bool inMemory = 0,
5:string bloomFilterType = "NONE",
6:i32 bloomFilterVectorSize = 0,
7:i32 bloomFilterNbHashes = 0,
8:bool blockCacheEnabled = 0,
9:i32 timeToLive = -1
3、 TRegionInfo:包含表中某个区域的信息
1:stringstartKey,
2:string endKey,
3:i64 id,
4:stringname,
5:stringversion
4、 Mutation: 用来更新或删除一个column-value
1:boolisDelete = 0,
2:stringcolumn,