VS环境下用thrift-C/C++接口开发hbase应用

摘要:
如果您还需要libsavernb,可以通过分别将libevent的相应值添加到include目录和link目录来设置项目的属性。6、 节俭接口源文件这部分操作需要在hbase服务器上执行。建议使用本机Linux平台。生成c++驱动程序文件库cpsrc/main/resources/org/apache/hadop/hbase/scher2/hbase。saverYOURPATH/savercdYOURPATh/节俭--gencphbase据说,节俭1将被hbase正式放弃,而节俭2的API更类似于其java API,因此我们选择节俭2作为开发接口。

一、前言

用C/C++开发hbase应用,需要用到thrift接口。在windows平台使用Visual Studio时,要比在linux平台复杂一些,主要是因为一些依赖库无法做到自动安装(类似yum install或 apt-get install那样),其次是因为Linux本来就是hbase及其依赖库的原生平台。但总体而言,两个平台的过程大体相似。

开发环境需要的组件包括:

  • 接口库libthrift、libthriftnb(可选),源码编译安装;
  • 依赖库boost,可二进制安装或编译安装;
  • 依赖库libevent(可选),源码编译安装;
  • 依赖库openssl,可解压安装或二进制安装;
  • thrift接口源码文件。

二、boost库

boost库是一个可移植、提供源代码的C++库,作为标准库的后备,是C++标准化进程的开发引擎之一。在Windows平台有二进制安装或编译安装两种方式,这里选择前一种。

  1. 从官网https://dl.bintray.com/boostorg/release/1.64.0/binaries/选择安装文件下载,注意与VS版本、OS位数保持一致,否则将来会报:链接错误—找不到库文件;
  2. Winows 64位、VS 2015对应的安装文件是boost_1_64_0-msvc-14.0-64.exe,下载后开始安装,过程略,假设安装目录为D:oost_1_64_0;
  3. 所有lib和dll文件均在D:oost_1_64_0lib64-msvc-14.0文件夹,而头文件(注意是hpp而非h)在boost子目录。

三、libevent库(可选)

Libevent 是一个用C语言编写的、轻量级的开源高性能事件通知库,只有在用到libthriftnb才需要。需源码编译安装。

  1. 访问官网http://libevent.org/,选择合适的稳定版源码包进行下载,假设为libevent-2.0.22-stable.tar.gz;
  2. 解压至相应目录,假设为D:libevent;因其中缺少一个文件test/print_winsock_errors.c,需补上,方法参见另一篇随笔《windows编译libevent时报告“缺少print_winsock_errors.obj”的解决》;
  3. 使用VS命令提示工具,cd至D:/libevent,开始编译:nmake /f Makefile.nmake
  4. 完成后,生成的库文件libevent_core.lib和libevent.lib及原有的h文件均在D:/libevent目录。

四、openssl库

openssl库是一个被很多项目用到的依赖库,解压安装和二进制安装均可。

  • 解压安装:这里直接使用了另一个项目的解压包,下载地址是http://downloads.datastax.com/cpp-driver/windows/,选择解压包时依然注意与VS版本、OS位数保持一致,假设是openssl-1.0.2l-win64-msvc140.zip,解压目录假设为D:openssl,静态库文件libeay32.lib和ssleay32.lib在D:opensslstaticlib文件夹;
  • 二进制安装:下载OpenSsl-Win64.exe开始安装,网上资源很多,不多说。

五、libthrift及libthritnb

libthrift是非阻塞式的服务,一般不需要,只需编译libthrift。

  1. 从thrift官网https://thrift.apache.org/download下载源码最新安装包thrift_0.10.0.tar.gz,假设解压至目录D:/thrift;
  2. 修改lib/cpp/3rdparty.props中的BOOST_ROOT、OPENSSL_ROOT_DIR和LIBEVENT_ROOT,或者在随后步骤中设置libthrift工程的properties;
  3. 用VS打开lib/cpp/thrift.sln(版本较早,可能需要升级),里面有libthrift和libthriftnb两个工程,一般只用第一个;
  4. 若3rdparty.props文件无效,修改工程的properties:附加incluede目录增加:D:libboost,D:openssl,附加link目录增加:D:libboostoost,D:openssllib;
  5. 编译libthrift工程,缺省生成的h文件在D:/thriftlibcppsrc hrift文件夹,库文件libthrift.lib在D:/thriftlibcppDebug(或Release)文件夹,注意只有本依赖库需要区分Debug版和Release版。
  6. 如果还需要libthriftnb,设置工程的properties时include目录和link目录再分别增加libevent的相应值即可,略。

六、thrift接口源文件

 本部分操作需在hbase服务器上进行,建议在原生的linux平台。

  • 如果不是采用源码编译安装的hbase,安装目录下没有hbase.thrift文件,此时需要下载hbase源码包,从中解压出hbase.thrift;
  • hbase提供了两种互不兼容的thrift接口:thrift(也有称为thrift1的)和thrift2,其thrift文件的目录分别为:
src/main/resources/org/apache/hadoop/hbase/thrift/Hbase.thrift
src/main/resources/org/apache/hadoop/hbase/thrift2/hbase.thrift

            据称,thrift1将被hbase官方抛弃,且thrift2的API与其java API更相似,推荐选择thrift2作为开发接口。

  • 生成c++的driver文件库
cp src/main/resources/org/apache/hadoop/hbase/thrift2/hbase.thrift YOURPATH/thrift
cd YOURPATH/thrift
thrift --gen cpp hbase.thrift

         据称,thrift1将被hbase官方抛弃,且thrift2的API与其java API更相似,故选择thrift2作为开发接口。

  • 开发目录下新生成gen-cpp文件夹,其下即为所需的接口源码文件,可复制到任意平台的开发环境。

        文件夹下有7个文件,但实际上只有6个有用,拷贝到windows平台:

        VS环境下用thrift-C/C++接口开发hbase应用第1张

  • 在hmaster服务器上启动hbase后,接着启动thrift2服务:
cd /usr/hbase-1.2.5/bin
./hbase-daemon.sh start thrift2        #单节点环境
./ hbase-daemons.sh start thrift2        #集群环境

        注意:如果是集群环境,thrift2服务只随HRegionServer启动,而与HMasterServer无关;编程时要连接的服务器只能是已启动thrift2服务的节点。

 七、VS开发注意事项

在VS中创建自己的工程,直接将上述6个接口源文件拷贝过来;

  1. 修改工程的properties,附加include目录增加:libthrift安装目录d: hriftlibcppsrc,d:libboost,注意:前一个最后不要加thrift文件夹,后一个最后不要加boost文件夹,它们已在thrift接口源码文件中指定;
  2. 继续修改工程的properties,附加link目录增加:libthrift、libboost和openssl库所在目录:D:/thriftlibcppDebug(或Release), D:oost_1_64_0lib64-msvc-14.0, D:opensslstaticlib;
  3. 继续修改工程的properties,链接库增加libthrift.lib、libeay32.lib, ssleay32.lib;
  4. 如果应用程序源码是从linux平台移植过来的,可能在#include处要略做调整,使包含的thrift相关头文件目录与接口源码文件中一致。

免责声明:文章转载自《VS环境下用thrift-C/C++接口开发hbase应用》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇(三)Java 高级特性shell脚本基本语法下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

flink常用命令

1.查看flink任务 /var/lib/hadoop-hdfs/flink/bin/flink  list 2.停止flink任务 /var/lib/hadoop-hdfs/flink/bin/flink  cancel  job Id 3.启动一个yarn session bin/yarn-session.sh -d -s 3 -jm 2048 -tm...

Python -扩展C++-Pytorch扩展

1.Python whl 文件和 egg 文件 可以执行和效率是两码事 setup.py用来编译和安装扩展模块。负责编译c++模块,封装成python可以调用的形式 所有能被整合或导入到其它python脚本的代码,都可以被称为扩展 Python调用C库比较简单,不经过任何封装打包成so,直接使用python的ctypes调用即可。 Pytho...

浅谈 qmake 之 pro、pri、prf、prl文件

尽管每次和cmake对比起来,我们总是说 qmake 简单、功能少。但是qmake仍然是一个非常复杂的东西,我想大多人应该和我一样吧: 不是太清楚CONFIG等变量到底如何起作用的 用过的qmake内置变量和函数不超过20个 看Qt Creator源码或者QtSolution等库中自己使用的 *.pro 文件就想看天书一样 本文只能抓住一条线,简单介绍...

[nginx] nginx源码分析--健康检查模块锁分析

健康检查模块 见前文:[nginx] nginx源码分析--健康检查模块 其中有一张框架图, 接下来的内容,将会利用到这个图中的内容。 [classic_tong @ https:////www.cnblogs.com/hugetong/p/12274125.html ]  描述 我们知道nginx是多进程的,每个进程都保存了相同的配置。但是实际上, 并不...

源码编译安装nginx及设置开机启动项

1、上传nginx文档;解压到/data目录下,并安装依赖包tar xf nginx-1.20.1.tar.gz -C /data/cd /data/nginx-1.20.1/ && ll依赖关系安装,执行如下:yum -y install zlib pcre pcre-devel openssl openssl-devel 2、自定义安装...

rpm 包安装的一些常用的命令以及 以及一些依赖包的查看

在安装  director ISO 时我们经常需要查看一些包的依赖关系:       #rpm -ql       #rpm -qa                 # rpm -qa|grep servicelog                  # rpm -qa vacpp*                        vacpp.rte-11....