1、 下载thrift-0.9.1.exe和源码包thrift-0.9.1.tar.gz
2、利用thrift-0.9.1.exe工具生成thrift连接hbase的客户端接口代码:
从hbase源码包目录
hbase-0.96.0-srchbase-0.96.0hbase-thriftsrcmainesourcesorgapachehadoophbase hrift
找到HBase.Thrift文件,拷贝至thrift-0.9.1.exe同一目录下:
在cmd命令行里切换到thrift-0.9.1目录下,执行下面的脚本,自动生成thrift的客户端c#接口代码,代码在gen-csharp目录文件里:
thrift-0.9.1.exe -gen csharp HBase.Thrift
3、在vs2010里创建解决方案
HBaseThriftAPI,新建2个工程,一个是Thrift(在解决方案上单击右键,选择添加-现有项目thrift-0.9.1libcsharpsrcThrift.sln),是从thrift-0.9.1的源码包里添加而来,然后编译生成动态库,
另外新建一个工程IThrift,把自动生成的接口代码添加进来,同时在应用中把Thrift的编译结果引用过来,
同时在ithrift里新建一个连接hbase里面thrift的测试客户端程序(TestClient.cs),代码如下(注意里面连接的IP、端口、表名、行键4个参数需要根据实际的替换一下):
using System;
using System.Collections.Generic;
using System.Threading;
using Thrift.Collections;
using Thrift.Protocol;
using Thrift.Transport;
using System.Text;
namespace Test
{
publicclassTestClient
{
publicstaticvoid Main(string[] args)
{
try
{
TTransport transport = new TSocket("192.168.0.101", 9090);//连接的IP、端口
TProtocol tProtocol = new TBinaryProtocol(transport);
var client = new Hbase.Client(tProtocol);
transport.Open();
List<TRowResult> reslut = client.getRow(Encoding.UTF8.GetBytes("test"),Encoding.UTF8.GetBytes("a"),null);//前面是表名、后面是行键名
foreach (var key in reslut)
{
Console.WriteLine(Encoding.UTF8.GetString(key.Row));
foreach (var k in key.Columns)
{
Console.Write(Encoding.UTF8.GetString(k.Key) +" ");
Console.WriteLine(Encoding.UTF8.GetString(k.Value.Value));
}
}
Console.ReadLine();
}
catch (Exception e)
{
Console.WriteLine(e.StackTrace);
}
}
}
}
|
后编译IThrift,生成IThrift.exe
注:本人环境vs2010+framework3.5
4、启动hadoop、hbase、thrift服务端
启动hadoop集群:
zzk1@zzk1-vm2:~/hadoop-1.2.1$bin/start-all.sh
启动hbase服务:
zzk1@zzk1-vm2:~/hbase-0.96.0-hadoop1/bin$ ./start-hbase.sh
启动服务端hbase里的thrift服务:
zzk1@zzk1-vm2:~/hbase-0.96.0-hadoop1/bin$ hbase-daemon.sh start thrift
5、验证c#通过thrift连接hbase是否成功:
用hbase shell命令进入hbase,查看表test数据(scan 'test')
点击vs2010生成的客户端ithrift.exe,可以看到连接到hbase,同时显示了表test的数据,和服务端hbase shell查出来的一致.
C#
thrift
hbase