go通过thrift连接hbase_如何使用C++通过thrift访问HBase进行操作

特别说明:该专栏文章均来源自微信公众号《大数据实战演练》,欢迎关注!

前言

上周六,接了一个紧急任务,说实现使用 C++ 访问 HBase 进行操作。说是用 thrift 来实现。对于 C++ 来说,我真的是门外汉,但需求如此,皱着眉头也要把它实现。好歹在同事的帮助下,也是实现了 demo 示例,现在就把这两天的成果分享给大家。

版本

HDP:2.6.4.0

HBase:1.1.2

一、安装编译thrift

1. 准备工作

使用 yum 安装 Development Tools :

yum -y groupinstall "Development Tools"

thrift 编译依赖于下面的工具,使用 yum 安装:

yum -y install automake libtool flex bison pkgconfig gcc-c++ boost-devel libevent-devel python-devel ruby-devel zlib-devel openssl-devel

2. 下载thrift安装包

为了生成依赖类库 /usr/local/include/thrift/ 和 /usr/local/lib/ ,需要下载 thrift 源码包。本文使用 thrift 0.8.0 版本,通过以下地址下载后并解压。

cd /usr;wget http://archive.apache.org/dist/thrift/0.8.0/thrift-0.8.0.tar.gztar zxvf thrift-0.8.0.tar.gz;rm -rf thrift-0.8.0.tar.gz

3. 编译thrift

cd /usr/thrift-0.8.0./configure --prefix=/usr/local/ --with-boost=/usr/local --with-libevent=/usr/local

命令执行完毕后,如下图所示:

cef68ec869e5ada34d488508eab2fd46.png

编译 thrift ,执行如下命令:

make && make install

命令执行完毕后,如下图所示:

1245f906bd394e7546fda9fe57b6e985.png

至此,thrift 0.8.0 就编译完成了。可执行 thrift -version 查看版本。

4. 检查相关文件是否存在

thrift编译成功后,会在 /usr/local/include/thrift/ 和 /usr/local/lib/目录下生成相关文件,用于后面使用 g++ 工具编译 cpp 文件。如下图所示:

e8419fa82c47c2d83a9b6345f3a68ad2.png

二、代码示例

1. 开启HBase thrift2

首先需要确保 HBase thrift2 服务正常运行。执行如下命令启动 HBase thrift2 服务:

/usr/hdp/2.6.4.0-91/hbase/bin/hbase-daemon.sh start thrift2

服务开启的默认端口号为 9090 ,可执行 netstat -ntlp | grep 9090 检测 thrift2 是否成功启动。

2. 生成c++相关文件

# 进入到hbase源码目录cd /usr/hdp/2.6.4.0-91/hbase/include/thrift# 在当前目录下生成gen-cpp目录,里面含有c++的相关文件thrift --gen cpp hbase2.thrift

gen-cpp 目录下的文件列表如下图所示:

4f616243bb0d5d46d7ef71369c9994c3.png

3. 编写客户端代码

创建 HbaseClient.cpp 文件(名称可自定义),向 hbase_test 表中插入一条数据,并打印指定 rowkey 的一行数据。代码内容如下所示:

#include "THBaseService.h"#include #include #include #include #include using namespace std;using namespace apache::thrift;using namespace apache::thrift::protocol;using namespace apache::thrift::transport;using namespace apache::hadoop::hbase::thrift2;using boost::shared_ptr;int readdb(int argc, char** argv) { fprintf(stderr, "readdb start"); int port = atoi(argv[2]); boost::shared_ptr socket(new TSocket(argv[1], port)); boost::shared_ptr transport(new TBufferedTransport(socket)); boost::shared_ptr protocol(new TBinaryProtocol(transport)); try { transport->open(); printf("open"); THBaseServiceClient client(protocol); TResult tresult; TGet get; std::vector cvs; const std::string table("hbase_test"); const std::string thisrow="1"; //get data get.__set_row(thisrow); bool be = client.exists(table,get); printf("exists result value = %d
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值