前言

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

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  start

启动Thrift2:

bin/hbase thrift2 -b HadoopMaster -p  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

  1. 下载Thrift的代码生成器thrift-0.9.3.exe 传送门
  2. 把Hbase.thrift和thrift-0.9.3.exe放到同一目录并执行命令
    thrift-0.9..exe  -gen csharp hbase.thrift 
  3. 执行上面命令后会在当前目录生成一个包含C#代码的文件夹:gen-csharp

Linux

  1. 在终端执行命令

    thrift --gen csharp Hbase.thrift
  2. 执行上面命令后会在当前目录生成一个包含C#代码的文件夹:gen-csharp
  • 类库生成:
  1. 新建一个C#类库项目ThriftHbaseClient并把gen-csharp里面的代码拷贝到新项目中
  2. 引用Thrift项目
  3. 编译生成 ThriftHbaseClient.dll

Hbase C#客户端测试

  1. 新建一个控制台项目
  2. 引用ThriftHbaseClient和Thrift项目
  3. 在main函数插入下面代码

Thrift 版本:

TTransport transport = null;
try
{
//实例化Socket连接
transport = new TSocket("192.168.1.10", );
//实例化一个协议对象
TProtocol tProtocol = new TBinaryProtocol(transport);
//实例化一个Hbase的Client对象
var client = new Hbase.Client(tProtocol);
//打开连接
transport.Open();
//根据表名,RowKey名来获取结果集
List<TRowResult> reslut = client.getRow(Encoding.UTF8.GetBytes("Test"), Encoding.UTF8.GetBytes("row1"), null);
//遍历结果集
foreach (var key in reslut)
{
Console.WriteLine("RowKey:\n{0}", Encoding.UTF8.GetString(key.Row));
//打印Qualifier和对应的Value
foreach (var k 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();

Thrift2 版本:

TTransport transport = null;
try
{
transport = new TSocket("192.168.1.10", );
TProtocol tProtocol = new TBinaryProtocol(transport);
var client = new THBaseService.Client(tProtocol);
//open connection
transport.Open();
//get row
TGet get = new TGet();
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 in reslut.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();

参考:

http://www.cnblogs.com/sixiweb/p/3556026.html

使用C#通过Thrift访问HBase的更多相关文章

  1. PHP通过Thrift操作Hbase

    PHP通过Thrift操作Hbase     HBase是一个开源的NoSQL产品,它是实现了Google BigTable论文的一个开源产品,和Hadoop和HDFS一起,可用来存储和处理海量col ...

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

    今天试着用C#和Thrift来访问Hbase,主要参考了博客园上的这篇文章.查了Thrift,Hbase的资料,结合博客园的这篇文章,终于搞好了.期间经历了不少弯路,下面我尽量详细的记录下来,免得大家 ...

  3. HBase(一): c#访问hbase组件开发

    HDP2.4安装系列介绍了通过ambari创建hbase集群的过程,但工作中一直采用.net的技术路线,如何去访问基于Java搞的Hbase呢? Hbase提供基于Java的本地API访问,同时扩展了 ...

  4. windows平台下用C#访问HBase

    Hadoop中的HBase有多种数据访问方式,ubuntu里可以用hbase shell查看操作hbase数据库,但windows平台下需要用thrift对它进行访问. 例如hadoop安装在/usr ...

  5. Nodejs通过Thrift操作hbase卡住原因分析及与javascript的垃圾回收机制的关系

    在最近使用Nodejs通过Thrift操作hbase的时候写了个脚本,不断发送http请求,从而取得hbase下所需的数据,但是在run的过程中for循环并没有执行完全,在执行一部分后会卡住,就再也进 ...

  6. CDH 6.0.1 版本 默认配置下 HUE | happybase 无法访问 Hbase 的问题

    第一个问题 HUE 无法直接连接到 HBase 在默认配置下 CDH 6.0.1 版本下的 HBase2.0 使用了默认配置 hbase.regionserver.thrift.compact = T ...

  7. PHP通过thrift2访问HBASE

    前一段时间需要在网页上显示HBASE查询的结果,考虑用PHP来实现,在网上搜了一下,普遍都是用thrift作为接口来实现的.​ 参考博文:​ http://www.cnblogs.com/scotom ...

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

    上一章完成了c#访问hbase的sdk封装,接下来以一个具体Demo对sdk进行测试验证.场景:每5秒抓取指定股票列表的实时价格波动行情,数据下载后,一方面实时刷新UI界面,另一方面将数据放入到在内存 ...

  9. 通过Thrift访问HDFS分布式文件系统的性能瓶颈分析

    通过Thrift访问HDFS分布式文件系统的性能瓶颈分析 引言 Hadoop提供的HDFS布式文件存储系统,提供了基于thrift的客户端访问支持,但是因为Thrift自身的访问特点,在高并发的访问情 ...

随机推荐

  1. 纯css实现扁平化360卫士logo demo

    前几天在w3ctech上看到有人用纯css写出了360卫士的logo,感觉蛮好玩的. 因为自己用css以来,还没有写过这种玩意,出于娱乐,我也来试着尝试一下. 开始也不知到怎么下手,最棘手的是那两个像 ...

  2. bzoj 1391 [Ceoi2008]order(最小割)

    [题意] 有n个有偿工作选做,m个机器,完成一个工作需要若干个工序,完成每个工序需要一个机器,对于一个机器,在不同的工序有不同的租费,但买下来的费用只有一个.问最大获益. [思路] 对于工作和机器建点 ...

  3. 树形DP CCPC网络赛 HDU5834 Magic boy Bi Luo with his excited tree

    // 树形DP CCPC网络赛 HDU5834 Magic boy Bi Luo with his excited tree // 题意:n个点的树,每个节点有权值为正,只能用一次,每条边有负权,可以 ...

  4. 安装CPqD/ofdissector遭遇的错误

    为了安装支持openflow1.3的wireshark插件,在下载了ofdissector.git,并进入了其src目录后,执行scons install,出现如下错误: util/FieldMana ...

  5. php pdo(二)

    定义:PDO(PHP Data Object)是PHP5才支持的扩展,它为PHP访问各种数据库定义了一个轻量级的.一致性的接口. PDO是PHP5中的一个重大功能,PHP6中将只默认使用PDO来处理数 ...

  6. 修改 jquery easyui 表单验证默认的样式

    目前对于不符合要求的输入域会在右侧显示一个带箭头的提示,可是如果我的输入框比较靠右的话就显示不全了(虽然会出滚动条,但是由于鼠标移开就消失了,所以还是看不到提示内容)! 能不能把这个提示的位置改变一下 ...

  7. HDU 5512 Pagodas (2015沈阳现场赛,找规律+gcd)

    Pagodas Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Sub ...

  8. labview 变体数据类型

    变体数据类型是LabVIEW中多种数据类型的容器.将其它数据转换为变体时,变体将存储数据和数据的原始类型,保证日后可将变体数据反向转换. 例如,如将字符串数据转换为变体,变体将存储字符串的文本,以及说 ...

  9. c++出错记录

    错误1如下:  vector<vector<int>> m_vc;  error: '&' cannot appear in a constant-expression ...

  10. SQLite数据库连接方式

    http://blog.csdn.net/ZF101201/archive/2010/05/26/5626365.aspx SQLite.NET Type:    .NET Framework Cla ...