使用C#和Thrift来访问Hbase实例

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的功能实现完毕。

时间: 2024-10-13 06:23:53

使用C#和Thrift来访问Hbase实例的相关文章

利用python访问Hbase(Thrift模块安装与测试)

hadoop环境介绍: master服务:node1 slave服务器:node2,node3,node4 mysql服务器:node29 Thrift安装在node1服务器上! 相关软件版本: hadoop版本:hadoop-0.20.2 sqoop版本:sqoop-1.2.0-CDH3B4 java版本:jdk1.7.0_67 mysql版本:5.1.65 Thrift版本:thrift-0.9.0 thrift安装链接:http://thrift.apache.org/download/

HBase(二): c#访问HBase之股票行情Demo

上一章完成了c#访问hbase的sdk封装,接下来以一个具体Demo对sdk进行测试验证.场景:每5秒抓取指定股票列表的实时价格波动行情,数据下载后,一方面实时刷新UI界面,另一方面将数据放入到在内存中模拟的MQ (实际生产情况,可用kafka等集群代替)->存入HBase数据库.提供按指定时间范围股票价格数据查询. 目录: 示例说明 示例效果图 rest server运行状态检查 获取股票实时数据代码 数据持续化至Hbase代码 从HBase读取数据代码 示例说明: 在Hbase 中创建两个表

PHP通过thrift2访问HBASE

前一段时间需要在网页上显示HBASE查询的结果,考虑用PHP来实现,在网上搜了一下,普遍都是用thrift作为接口来实现的.? 参考博文:? http://www.cnblogs.com/scotoma/archive/2013/05/16/3081236.html 用上述网址里提供的PHP代码,可以访问公司里的一个HBASE集群,但是另一个集群怎么也访问不了,上网查了一下,发现thrift有两套HBASE的接口--thrift和thrift2,而且两套接口并不兼容. ? 用thrift2的接口

JNI/NDK开发指南(七)——C/C++访问Java实例变量和静态变量

转载请注明出处:http://blog.csdn.net/xyang81/article/details/42836783 在上一章中我们学习到了如何在本地代码中访问任意Java类中的静态方法和实例方法,本章我们也通过一个示例来学习Java中的实例变量和静态变量,在本地代码中如何来访问和修改.静态变量也称为类变量(属性),在所有实例对象中共享同一份数据,可以直接通过[类名.变量名]来访问.实例变量也称为成员变量(属性),每个实例都拥有一份实例变量数据的拷贝,它们之间修改后的数据互不影响.下面看一

java多线程 同步方法也会被抢, 就是只有同步方法在其他线程要访问同一个实例的同步方法时。。。。

ackage cn.twj.rtti.t;//: concurrency/AtomicityTest.java import java.util.concurrent.*; public class AtomicityTest implements Runnable { private int i = 0; public int getValue() { return i; } //设置此方法为同步方法的意思并不是说进入此方法后其他线程就会等待此方法完成了 //在非进入此方法的线程中,还是会和当

java操作Hbase实例

所用HBase版本为1.1.2,hadoop版本为2.4 /* * 创建一个students表,并进行相关操作 */ import java.io.IOException; import java.util.ArrayList; import java.util.List; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.HBaseConfiguration; import org.apach

Thrift入门及Java实例演示&lt;转载备用&gt;

Thrift入门及Java实例演示 作者: Michael 日期: 2012 年 6 月 14 日 •概述 •下载配置 •基本概念 1.数据类型 2.服务端编码基本步骤 3.客户端编码基本步骤 4.数据传输协议 •实例演示(java) 1. thrift生成代码 2. 实现接口Iface 3.TSimpleServer服务模型 4.TThreadPoolServer 服务模型 5.TNonblockingServer 服务模型 6.THsHaServer服务模型 7.异步客户端 [一].概述 T

使用happybase访问HBase出现Broken pipe问题---两个“惊天”大bug

来源使用happybase通过thrift接口向HBase读取.写入数据时,出现Broken pipe的错误.排查步骤: 1.查看hbase的日志: Java HotSpot(TM) 64-Bit Server VM warning: Using incremental CMS is deprecated and will likely be removed in a future release 17/05/12 18:08:41 INFO util.VersionInfo: HBase 1.

【hbase】使用thrift with python 访问HBase

HBase 版本: 0.98.6 thrift   版本: 0.9.0 使用 thrift client with python 连接 HBase 报错: 1 Traceback (most recent call last): 2 File "D:\workspace\Python\py\helloworld.py", line 27, in <module> 3 tables = client.getTableNames() 4 File "E:\mazhon