windows平台下用C#訪問HBase


Hadoop中的HBase有多種數據訪問方式,ubuntu里可以用hbase shell查看操作hbase數據庫,但windows平台下需要用thrift對它進行訪問。

例如hadoop安裝在/usr/local/hadoop,hbase在/usr/local/hbase,thrift在/usr/local/thrift,則hbase.thrift文件應該使用 hbase/src/main/resources/org/apache/hadoop/hbase/thrift/hbase.thrift這個文件。thrift2目錄下的hbase.thrift生成的方法不同,不好用。

1. 到thrift目錄下,運行

bin/thrift -gen csharp /usr/local/hbasesrc/main/resources/org/apache/hadoop/hbase/thrift/hbase.thrift

會在當前目錄生成gen-csharp文件夾,運行 zip -r cs.zip gen-csharp 打包到cs.zip,用ftp傳輸給windows。

2. 把thrift目錄里的thrift c#訪問類代碼也打包傳輸到windows。

/usr/local/thrift/lib/csharp,src目錄里有Thrift.csproj

3. 建立TestHbaseClient控制台程序,把Thrift項目加入solution。建立HBaseCommon項目,把gen-csharp里的文件都加入到此項目,最好給每個文件都加上命名空間。HBaseCommon引用Thrift,TestHbaseClient引用其它兩個項目。

在Main函數里:

 1 TTransport transport = new TSocket("192.168.16.105", 9090);
 2 TProtocol tProtocol = new TBinaryProtocol(transport);
 3 var client = new Hbase.Client(tProtocol);
 4 transport.Open();
 5 
 6 List<byte[]> tbs =  client.getTableNames();
 7 foreach (byte[] tb in tbs)
 8 {
 9     string tn = Encoding.UTF8.GetString(tb);
10     Console.WriteLine("table:" + tn);
11 }
12 
13 List<TRowResult> reslut = client.getRow(Encoding.UTF8.GetBytes("case_info"), Encoding.UTF8.GetBytes("row1"), null);
14 foreach (var key in reslut)
15 {
16     Console.WriteLine(Encoding.UTF8.GetString(key.Row)); 
17     foreach (var k in key.Columns)
18     {
19         Console.Write(Encoding.UTF8.GetString(k.Key) + "\t");
20         Console.WriteLine(Encoding.UTF8.GetString(k.Value.Value));
21     }
22 }

4. 運行這段代碼,會報錯,連不上服務器,需要到hbase里設置一下,並啟動thrift服務。

修改/usr/local/hbase/conf/hbase-site.xml,先加個偽分布式進行測試:

<property>

<name>hbase.rootdir</name>

<value>/home/hadoop/hbasedir</value>

</property>

到/usr/local/hbase目錄下重啟hbase服務

bin/hbase-start.sh

再運行bin/hbase-daemon.sh start thrift

現在就可以用C#去訪問hbase數據庫的內容了。

 


免責聲明!

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



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