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

吐血整理:


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

一.编译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
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
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、付费专栏及课程。

余额充值