使用C#和Thrift來訪問Hbase執行個體

來源:互聯網
上載者:User

標籤:des   style   blog   http   os   使用   io   strong   for   

1.開啟Hbase的Thrift服務

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

 

1.下載Thrift 0.7.0的源碼和代碼產生工具(姑且這麼叫)

從上面提供的Thrift下載頁面中的目錄裡分別下載代碼產生工具:

thrift-0.7.0.exe

和Thrift原始碼:

thrift-0.7.0.tar.gz

2.編譯Thrift

用VS2012建立一個解決方案,然後再在解決方案中建立一個類庫的項目,我起名叫thrift-0.7.0,目標框架選擇.Net Framework4,將下載後的thrift-0.7.0.tar.gz解壓後的thrift-0.7.0\lib\csharp\src目錄下的除Thrift.csproj和Thrift.sln這兩個檔案外的所有檔案和檔案夾都拷貝到在vs中建立的這個項目中(在vs的方案總管中選中該項目,Ctrl+V即可),現在編譯該項目,以產生thrift-0.7.0.dll。

3.產生代碼

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

 

 

Thrift

Thrift2

結構 struct TCellstruct ColumnDescriptorstruct TRegionInfostruct Mutationstruct BatchMutation

 

struct TIncrement

struct TColumn

struct TRowResult

struct TScan

struct TTimeRangestruct TColumnstruct TColumnValuestruct TColumnIncrementstruct TResult

 

struct TGet

struct TPut

struct TDelete

struct TIncrement

struct TScan

struct TRowMutations

異常 exception IOErrorexception IllegalArgumentexception AlreadyExists exception TIOErrorexception TIllegalArgument
其他   union TMutationenum TDeleteTypeenum TDurability
服務 名稱為:Hbasevoid enableTable()void disableTable()bool isTableEnabled()void compact()

 

void majorCompact()

list<Text> getTableNames()

map<Text,ColumnDescriptor> getColumnDescriptors()

list<TRegionInfo> getTableRegions()

void createTable()

void deleteTable()

list<TCell> get()

list<TCell> getVer()

list<TCell> getVerTs()

list<TRowResult> getRow()

list<TRowResult> getRowWithColumns()

list<TRowResult> getRowTs()

list<TRowResult> getRowWithColumnsTs()

list<TRowResult> getRows()

list<TRowResult> getRowsWithColumns()

list<TRowResult> getRowsTs()

list<TRowResult> getRowsWithColumnsTs()

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()

list<TRowResult> scannerGet()

list<TRowResult> scannerGetList()

void scannerClose()

list<TCell> getRowOrBefore()

TRegionInfo getRegionInfo()

名稱為:THBaseServicebool exists(…)TResult get(…)list<TResult> getMultiple(…)void put(…)

 

bool checkAndPut(…)

void putMultiple(…)

void deleteSingle(…)

list<TDelete> deleteMultiple(…)

bool checkAndDelete(…)

TResult increment(…)

i32 openScanner(…)

list<TResult> getScannerRows(…)

void closeScanner(…)

void mutateRow(…)

list<TResult> getScannerResults(…)

 

好了,書歸正傳,閑言少敘,咱們繼續幹活。在VS中建立類庫項目,命名為ThriftHbaseCommon,目標框架依然是.Net Framework 4,為該項目添加對項目thrift-0.7.0的引用。將Hbase.thrift複製到和剛才下載的thrift-0.7.0.exe同一個目錄,當然你也可以不放在同一個目錄,不過這樣的話,你產生代碼的時候就得多打幾個字,我是放在D:\thrift\0.7.0目錄中。開啟命令列,進入到該目錄,運行thrift-0.7.0.exe  -gen csharp hbase.thrift 。一眨眼的功夫命令就執行完畢了,然後在該目錄下會產生gen-csharp檔案夾,開啟該檔案夾,拷貝所有檔案到ThriftHbaseCommon項目中去,方法跟第二步講的一樣。編譯該項目。

4.編寫測試代碼

在VS中建立控制台項目,命名為TestConsoleApplication,目標框架依然是.Net Framework 4,為該項目添加對項目ThriftHbaseCommon的引用。在Program.cs的main函數中輸入以下代碼:

TTransport transport = null;

            try             {                 //執行個體化Socket串連                 transport =  new  TSocket( "192.168.10.101" , 9090);                 //執行個體化一個協議對象                 TProtocol tProtocol =  new  TBinaryProtocol(transport);                 //執行個體化一個Hbase的Client對象                 var  client =  new  Hbase.Client(tProtocol);                 //開啟串連                 transport.Open();                 //根據表名,RowKey名來擷取結果集                 List<TRowResult> reslut = client.getRow(Encoding.UTF8.GetBytes( "dz_CDN_Ip_Stat" ), Encoding.UTF8.GetBytes( "201310_001_0_1100" ),  null );                 //遍曆結果集                 foreach  ( var  key  in  reslut)                 {                     Console.WriteLine( "RowKey:\n{0}" ,Encoding.UTF8.GetString(key.Row));                     //列印Qualifier和對應的Value                     foreach  ( var  in  key.Columns)                     {                         Console.WriteLine( "Family:Qualifier:"  "\n"  + Encoding.UTF8.GetString(k.Key));                         Console.WriteLine( "Value:" +Encoding.UTF8.GetString(k.Value.Value));                     }                 }             }             catch  (Exception e)             {                 System.Console.WriteLine(e);             }             finally             {                 if  ( null  != transport)                 {                     transport.Close();                 }             }             Console.ReadLine();

 

現在調試該項目,由於我的表中該key對應的值為24,所以程式列印出如下結果:

RowKey:
201310_001_0_1100
Family:Qualifier:
d:ipn
Value:24

至此,用C#和Thrift串連Hbase的功能實現完畢。

使用C#和Thrift來訪問Hbase執行個體

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.