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


    一、前言

    用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平台:

            

    • 在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相关头文件目录与接口源码文件中一致。
  • 相关阅读:
    js之判断非空
    解决eclipse添加不了tomcat8的问题
    Java(eclipse)连接MySQL8.0以上版本数据库方式
    面试必备的:Redis和MongoDB的区别
    简述关系型数据库和非关系型数据库
    非关系型数据库MongoDB初探,以及和Redis的对比
    day53:django:URL别名/反向解析&URL分发&命名空间&ORM多表操作修改/查询
    day52:django:ORM单表/多表操作
    day51:django:dispatch&模板渲染&过滤器&标签&组件&静态文件配置
    day50:django:有名/无名分组&FBV/CBV
  • 原文地址:https://www.cnblogs.com/wggj/p/7573553.html
Copyright © 2020-2023  润新知