c++连接hbase指南

本文档详细介绍了使用C++连接HBase的过程,包括环境配置、操作步骤和HbaseClient类中的结构与函数。首先,需安装Thrift并生成CPP文件,启动Hbase的Thrift服务。接着,通过创建连接、调用HbaseClient类的函数进行操作,如开启、禁用表,获取和修改数据。最后,列出了HbaseClient中涉及的异常、数据结构和操作函数,提供了一整套C++操作HBase的指南。
摘要由CSDN通过智能技术生成

环境配置

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,

Hbase 基本操作类 static { //此处可以使用hbase的配置文件,也可以通过代码来实例化hbase连接 /* * Configuration HBASE_CONFIG = new Configuration(); * HBASE_CONFIG.set("hbase.zookeeper.quorum", "10.229.171.45"); * HBASE_CONFIG.set("hbase.zookeeper.property.clientPort", "2181"); * HBASE_CONFIG.set("hbase.zookeeper.quorum","10.233.92.85,10.233.92.86,10.233.92.88"); * HBASE_CONFIG.set("hbase.zookeeper.property.clientPort", "2181"); * HBASE_CONFIG.set("zookeeper.znode.parent", "/hbase-unsecure"); conf = HBaseConfiguration.create(HBASE_CONFIG); */ conf = HBaseConfiguration.create(); if("kerberos".equals(conf.get("hbase.security.authentication"))){ try { //设置hadoop.security.authentication为kerberos conf.set("hadoop.security.authentication", "kerberos"); //获取kerberos配置文件路径(krb为kerberos配置文件) String krbStr=Thread.currentThread().getContextClassLoader().getResource("krb").getFile(); //获取用户票据hezhong路径(hezhong为给合众分配的用户配置文件) String keyStr=Thread.currentThread().getContextClassLoader().getResource("jdzy").getFile(); //初始化配置文件 System.setProperty("java.security.krb5.conf", krbStr); //使用用户hezhong登录 UserGroupInformation.setConfiguration(conf); UserGroupInformation.loginUserFromKeytab("jdzy/f04345e6-70c1-448a-9bbb-4ac6b4c0109b@POLICE.COM", keyStr); } catch (IOException e) { e.printStackTrace(); } } tablePool = new HTablePool(conf, poolsize); logger.debug("create hbase connection success"); // System.out.println("create hbase connection success"); }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值