c# 访问hbase_使用C#通过Thrift访问HBase

前言

因为项目需要要为客户程序提供C#.Net的HBase访问接口,而HBase并没有提供原生的.Net客户端接口,可以通过启动HBase的Thrift服务来提供多语言支持。

环境

把环境贴出来是因为不同版本的组件之间可能会存在兼容性的问题

Thrift安装:传送门

HBase: 1.0.3

Thrift: 0.9.3

启动HBase的Thrift服务

HBase 提供两个版本的Thrift服务:Thrift 和 Thrift2

Thrift 和 Thrift2 介绍:传送门

个人更喜欢新版本的Thrift2,更简单、更强大

注:同一时间只能启动一个版本的Thrift服务

启动Thrift:

bin/hbase thrift -b HadoopMaster -p 9099 start

启动Thrift2:

bin/hbase thrift2 -b HadoopMaster -p 9099 start

编译Thrift的C#客户端

从Thrift的源码里找到C#客户端的源码,路径:\lib\csharp

Thrift 0.9.3 源码下载:传送门

用VS打开解决方案,编译生成:Thrift.dll

生成基于Thrift的HBase C#客户端代码

从HBase的源码里找到Hbase.thrift文件

Thrift:hbase-thrift\src\main\resources\org\apache\hadoop\hbase\thrift\

Thrift2:hbase-thrift\src\main\resources\org\apache\hadoop\hbase\thrift2\

HBase 1.0.3 源码下载:传送门

代码生成:

Windows

下载Thrift的代码生成器thrift-0.9.3.exe 传送门

把Hbase.thrift和thrift-0.9.3.exe放到同一目录并执行命令

thrift-0.9.3.exe -gen csharp hbase.thrift

执行上面命令后会在当前目录生成一个包含C#代码的文件夹:gen-csharp

Linux

在终端执行命令

thrift --gen csharp Hbase.thrift

执行上面命令后会在当前目录生成一个包含C#代码的文件夹:gen-csharp

类库生成:

新建一个C#类库项目ThriftHbaseClient并把gen-csharp里面的代码拷贝到新项目中

引用Thrift项目

编译生成 ThriftHbaseClient.dll

Hbase C#客户端测试

新建一个控制台项目

引用ThriftHbaseClient和Thrift项目

在main函数插入下面代码

Thrift 版本:

TTransport transport = null;try{//实例化Socket连接

transport = new TSocket("192.168.1.10", 9099);//实例化一个协议对象

TProtocol tProtocol = newTBinaryProtocol(transport);//实例化一个Hbase的Client对象

var client = newHbase.Client(tProtocol);//打开连接

transport.Open();//根据表名,RowKey名来获取结果集

List reslut = client.getRow(Encoding.UTF8.GetBytes("Test"), Encoding.UTF8.GetBytes("row1"), null);//遍历结果集

foreach (var key inreslut)

{

Console.WriteLine("RowKey:\n{0}", Encoding.UTF8.GetString(key.Row));//打印Qualifier和对应的Value

foreach (var k inkey.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();

Thrift2 版本:

TTransport transport = null;try{

transport= new TSocket("192.168.1.10", 9099);

TProtocol tProtocol= newTBinaryProtocol(transport);var client = newTHBaseService.Client(tProtocol);//open connection

transport.Open();//get row

TGet get = newTGet();get.Row = Encoding.UTF8.GetBytes("row1");

TResult reslut= client.get(Encoding.UTF8.GetBytes("test"), get);//print results

Console.WriteLine("RowKey:\n{0}", Encoding.UTF8.GetString(reslut.Row));foreach (var k inreslut.ColumnValues)

{

Console.WriteLine("Family:Qualifier:" + "\n" + Encoding.UTF8.GetString(k.Family) + ":" +Encoding.UTF8.GetString(k.Qualifier));

Console.WriteLine("Value:" +Encoding.UTF8.GetString(k.Value));

}

}catch(Exception e)

{

System.Console.WriteLine(e);

}finally{if (null !=transport)

{

transport.Close();

}

}

Console.ReadLine();

参考:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值