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:\boost_1_64_0;
  3. 所有lib和dll文件均在D:\boost_1_64_0\lib64-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:\openssl\static\lib文件夾;
  • 二進制安裝:下載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:\libboost\boost,D:\openssl\lib;
  5. 編譯libthrift工程,缺省生成的h文件在D:/thrift\lib\cpp\src\thrift文件夾,庫文件libthrift.lib在D:/thrift\lib\cpp\Debug(或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:\thrift\lib\cpp\src,d:\libboost,注意:前一個最后不要加thrift文件夾,后一個最后不要加boost文件夾,它們已在thrift接口源碼文件中指定;
  2. 繼續修改工程的properties,附加link目錄增加:libthrift、libboost和openssl庫所在目錄:D:/thrift\lib\cpp\Debug(或Release), D:\boost_1_64_0\lib64-msvc-14.0, D:\openssl\static\lib;
  3. 繼續修改工程的properties,鏈接庫增加libthrift.lib、libeay32.lib, ssleay32.lib;
  4. 如果應用程序源碼是從linux平台移植過來的,可能在#include處要略做調整,使包含的thrift相關頭文件目錄與接口源碼文件中一致。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM