基于Thrift(C++)的hBase通信接口开发文档整理

来源:互联网 发布:mac app store无法下载 编辑:程序博客网 时间:2024/05/20 00:15

吐血整理:


-----------------------------------------------------------------------------------------------------------------------------------------------------------------------

一.编译boost:
    1.下载boost源码。boost_1_56_0.zip(http://www.boost.org/)。
    2.解压到指定目录:E:\HBase\boost_1_56_0。
    3.打开vs2013本地命令行开发工具。
    4.进入到boost文件夹路径:“cd E:\HBase>cd boost_1_56_0”。
    5.执行bootstrap.bat,生产boost编译工具。命令行输入:“bootstrap.bat”。
    6.命令行执行编译命令,可以指定文件路径:“bjam install stage --toolset=msvc-12.0 --stagedir="C:\Boost\boost_vc_120"”。
    7.等待约1个小时后编译完成,在C:\Boost\boost_vc_120文件夹下生产三个文件夹。
        include文件夹包含".h头文件";
        lib文件夹包含".lib库文件"。
    8.boost库编译完成。
二.编译libevent:
    1.下载:libevent-2.0.22-stable.tar.gz(http://libevent.org/)。
    2.解压libevent到指定文件夹路径:E:\HBase\libevent-2.0.22-stable。
    3.打开vs2013本地命令行开发工具。
    4.进入到libevent文件夹路径:cd E:\HBase\libevent-2.0.22-stable。
    5.命令行执行编译命令:“nmake /f Makefile.nmake”
    6.编译成功后生产3个lib库文件:libevent.lib;libevent_core.lib;libevent_extras.lib;将3个lib文件复制到在E:\HBase\libevent-2.0.22-stable路径下建立的lib文件夹中。
    7.将WIN32-Code文件夹以及event.h,evhttp.h,evutil.h复制到include文件夹下。
    8.libevent编译完成。
三.编译openssl:
    1.下载ActivePerl编译工具(http://www.activestate.com/activeperl/downloads/)。
    2.安装ActivePerl到指定路径(C:\Perl64),直接点击下一步即可安装完成。
    3.cmd命令行进入到C:\Perl64\eg路径:执行“perl example.pl”命令进行测试,显示“Hello from ActivePerl!”表示安装成功。
    4.配置windows环境变量,在path目录下配置:C:\Perl64\bin。cmd命令行窗口执行perl -h命令成功则表明Perl安装配置成功。
    5.将VS2013安装的执行程序路径也配置到环境变量中。E:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin
    6.下载openssl源码(https://www.openssl.org/source/):openssl-1.0.1t.tar.gz。
    7.加压openssl到指定文件夹:E:\HBase\openssl。
    8.打开vs2013本地命令行开发工具。
    9.进入到openssl文件路径,执行Configure命令(配置编译参数):“perl configure VC-WIN32”
    10.编运行ms\do_ms命令。“ms\do_ms”
    11.编译openssl:“nmake -f ms\nt.mak”
    12.编译成功后,在inc32文件下保存有openssl的头文件文件夹,在out32文件夹下生成:libeay32.lib和ssleay32.lib两个lib文件。
    13.将inc32文件下的头文件复制到一个include文件夹中,将libeay32.lib和ssleay32.lib两个lib文件复制到一个lib文件夹中,其它程序可以直接对头文件和库文件进行引用调用。
    14.openssl编译完成。
四.编译thrift:
    1.下载thrift-0.9.3.tar.gz。
    2.解压thrift到指定目录:E:\HBase\thrift-0.9.3
    3.在E:\HBase\thrift-0.9.3\thrift-0.9.3\lib\cpp目录下利用VS2013打开“test”工程,包含两个项目:libthrift和libthriftnb。
    4.在test工程目录下建立include、lib两个文件夹,用于保存“.h头文件”和“.lib库文件”。
    5.将boost、libevent、openssl文件夹下:所有include文件复制到test目录下的include文件夹中;所有lib文件复制到test目录下的lib文件夹中。
    6.由于thrift工程中只对一些典型的库文件进行了编译。在开发hBase接口时需要添加一些thrift的现有项进行编译。包括:
        TOutput.h、TOutput.cpp、protocol\TProtocol.h、protocol\TProtocol.cpp、async\TConcurrentClientSyncInfo.h、async\TConcurrentClientSyncInfo.cpp。
    6.打开libthrift项目“属性”配置:
        1)在"配置属性"\"C\C++"\"常规"\"附加包含目录"中,添加include文件夹路径。
        2)在"配置属性"\"库管理器"\"常规"\"附加库目录"中,添加lib文件夹路径。
    7.打开libthriftnb项目“属性”配置:
        1)在"配置属性"\"C\C++"\"常规"\"附加包含目录"中,添加include文件夹路径。
        2)在"配置属性"\"库管理器"\"常规"\"附加库目录"中,添加lib文件夹路径。
    8.编译libthrift和libthriftnb两个项目,编译成功后在Debug目录下生产“libthrift.lib”和“libthriftnb.lib”两个库文件。
    9.建立thrift客户端测试项目:TestClient。
    10.添加hBase数据库接口C++源文件:HistInterface.h;HistInterface.cpp;zg_constants.h;zg_constants.cpp;zg_types.h;zg_types.cpp。
    11.在TestClient项目目录下建立include、lib两个文件夹。
        1)将thrift项目下的include路径下的文件和thrift\cpp\src路径下的文件都复制到include文件夹中。
        2)将thrift项目下的lib路径下的文件和thrift\cpp\Debug中编译出来的libthrift.lib和libthriftnb.lib文件复制到lib文件夹中。
    11.打开TestClient项目“属性”配置。
        1)在"配置属性"\"C\C++"\"常规"\"附加包含目录"中,添加include文件夹路径。
        2)在"配置属性"\"库管理器"\"常规"\"附加库目录"中,添加lib文件夹路径。
    12.在"配置属性"\"链接器"\"输入"\"附加依赖项"中添加"libthrift.lib"、"libeay32.lib"、"ssleay32.lib"库文件名。
    13.编译TestClient项目,无报错。
    14.将编译出的TestClient.exe可执行程序复制到服务器上可以直接点击运行,不需要再加载库文件。至此,hBase的Thrift(C++)版本通信接口执行成功。
五.总结:
    1.按照上述操作在win7和win10的64位操作系统,VS2013的编程环境中测试成功。
    2.所有上述底层库的编译都是基于“源代码”的形式进行编译,也可以直接在官网上下载都应版本的二进制执行文件,(版本可能会存在差异)。
    3.在相同的windows64位操作系统,VS2013开发环境下,可以直接复制编译好的include头文件和lib文件进行程序二次开发。
    4.程序部署时可以在windows64位的裸机上直接使用编译好的可执行程序(例如TestClient.exe)。如果没有VC120的开发环境,需要将windows系统的msvcp120.dll、msvcp120d.dll、msvcr120.dll、msvcr120d.dll系统文件复制到执行程序文件夹下。
    5.在windows系统thrift的C++版本开发实现中,需要使用到boost、libevent、openssl等底层库文件,有可能出现库版本、编译不通过等多种问题。保持耐心,多测试、多查阅资料,最终会大功告成。

0 0
原创粉丝点击