使用C 和Thrift來訪問Hbase例項

2021-09-06 13:55:58 字數 3679 閱讀 7337

今天試著用c#和thrift來訪問hbase,主要參考了上的這篇文章。查了thrift,hbase的資料,結合的這篇文章,終於搞好了。期間經歷了不少彎路,下面我盡量詳細的記錄下來,免得大家走彎路。

hbase 0.94.1

vs2012(.netframework 4.0)

一定要注意各產品的版本號,不同的版本可能相互不相容。

下面開始幹活:

0.開啟hbase的thrift服務

在hbase的master上執行:hbase-daemon.sh start thrift -threadpool 

thrift-0.7.0.exe
和thrift源**:

thrift-0.7.0.tar.gz
2.編譯thrift

3.生成**

將hbase安裝包解壓,或者從現有集群上拷貝也可。找到這個目錄:hbase/src/main/resources/org/apache/hadoop/hbase/thrift,在該目錄下找到檔案hbase.thrift。注意,千萬不要找到thrift2目錄裡去了,我就在這裡走了彎路,因為thrift2比thrift精簡了不少介面,而且呼叫方式及介面引數也已經改變了。具體參考這個文章。算了,我還是貼出來吧,免得文章失效:

thrift

thrift2

結構

struct tcell

struct columndescriptor

struct tregioninfo

struct mutation

struct batchmutation

struct tincrement

struct tcolumn

struct trowresult

struct tscan

struct ttimerange

struct tcolumn

struct tcolumnvalue

struct tcolumnincrement

struct tresult

struct tget

struct tput

struct tdelete

struct tincrement

struct tscan

struct trowmutations

異常

exception ioerror

exception illegalargument

exception alreadyexists

exception tioerror

exception tillegalargument

其他

union tmutation

enum tdeletetype

enum tdurability

服務

名稱為:hbase

void enabletable()

void disabletable()

bool istableenabled()

void compact()

void majorcompact()

listgettablenames()

mapgetcolumndescriptors()

listgettableregions()

void createtable()

void deletetable()

listget()

listgetver()

listgetverts()

listgetrow()

listgetrowwithcolumns()

listgetrowts()

listgetrowwithcolumnsts()

listgetrows()

listgetrowswithcolumns()

listgetrowsts()

listgetrowswithcolumnsts()

void mutaterow()

void mutaterowts()

void mutaterows()

void mutaterowsts()

i64 atomicincrement()

void deleteall()

void deleteallts()

void deleteallrow()

void increment()

void incrementrows()

void deleteallrowts()

scannerid scanneropenwithscan()

scannerid scanneropen()

scannerid scanneropenwithstop()

scannerid scanneropenwithprefix()

scannerid scanneropents()

scannerid scanneropenwithstopts()

listscannerget()

listscannergetlist()

void scannerclose()

listgetroworbefore()

tregioninfo getregioninfo()

名稱為:thbaseservice

bool exists(...)

tresult get(...)

listgetmultiple(...)

void put(...)

bool checkandput(...)

void putmultiple(...)

void deletesingle(...)

listdeletemultiple(...)

bool checkanddelete(...)

tresult increment(...)

i32 openscanner(...)

listgetscannerrows(...)

void closescanner(...)

void mutaterow(...)

listgetscannerresults(...)

4.編寫測試**

ttransport transport = null;

try",encoding.utf8.getstring(key.row));

//列印qualifier和對應的value

foreach (var k in key.columns)}}

catch (exception e)

finally

}console.readline();

現在除錯該專案,由於我的表中該key對應的值為24,所以程式列印出如下結果:

rowkey:

201310_001_0_1100

family:qualifier:

d:ipn

value:24

至此,用c#和thrift連線hbase的功能實現完畢。

使用 HttpLib 來訪問 Web 服務

c 為開發者提供很多便利方法用來訪問各種 web 服務,但是編寫非同步的訪問方式卻是有點複雜。windows 通訊框架是乙個客戶端 伺服器通訊非常棒的工具。我精彩發現我自己必須寫很多 來使用已有的 api。微軟提供的這些 api 對一些基本的使用來說都是過於複雜。而 httplib 大大的簡化了在 ...

使用OTL來訪問資料庫

使用otl來訪問資料庫 牽著老婆滿街逛 c 部落格 使用otl來訪問資料庫 otl介紹 otl 是 oracle,odbc and db2 cli template library 的縮寫,是乙個c 編譯中操控關聯式資料庫的模板庫,它目前幾乎支援所有的當前各種主流資料庫,例如oracle,ms sq...

perl 使用SUPER類來訪問覆蓋的方法

有時候,你希望乙個衍生類的方法表現得象基類中的某些方法的封裝器 這就是 super 偽類提供便利的地方。它令你能夠呼叫乙個覆蓋了的基類方法,而不用宣告 是哪個類定義了該方 法。注 不要把這個和第十一章的覆蓋 perl 的內建函式的機制混淆 了,那個不是物件方法並且不會被繼承覆 蓋。你呼叫內建函式的覆...