C# 将Hbase与C结合使用#

C# 将Hbase与C结合使用#,c#,vb.net,hbase,C#,Vb.net,Hbase,如何在C#/VB.NET中使用Hbase数据库? (使用=连接、查询、获取结果、插入、更新、删除) 我在谷歌上找不到有用的答案。来自: 一个REST-ful Web服务网关 支持XML、Protobuf和二进制文件 数据编码选项 有很多内置的XML操作api。我刚刚发布了HBase C#Thrift binding作为nuget包。 或者,您可以从bitbucket获取代码/二进制文件:HBase C#Thrift工作得很好。只需在windows计算机上下载最新的thrift-0.9.2.exe

如何在C#/VB.NET中使用Hbase数据库? (使用=连接、查询、获取结果、插入、更新、删除)

我在谷歌上找不到有用的答案。

来自:

一个REST-ful Web服务网关 支持XML、Protobuf和二进制文件 数据编码选项


有很多内置的XML操作api。

我刚刚发布了HBase C#Thrift binding作为nuget包。 或者,您可以从bitbucket获取代码/二进制文件:

HBase C#Thrift工作得很好。只需在windows计算机上下载最新的thrift-0.9.2.exe、thrift.dll和Hbase.thrift文件。您可以使用以下命令生成所需的c#文件:

thrift-0.9.2.exe -gen csharp Hbase.thrift
因此,您将获得以下文件:

AlreadyExists.cs
BatchMutation.cs
ColumnDescriptor.cs
Hbase.cs
IllegalArgument.cs
IOError.cs
Mutation.cs
TAppend.cs
TCell.cs
TColumn.cs
TIncrement.cs
TRegionInfo.cs
TRowResult.cs
TScan.cs
将它们包括在项目中,并将thrift.dll添加到项目引用中。简短示例代码(列出表格并插入/更新单元格值):

使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用系统文本;
使用节俭协议;
使用节俭的交通工具;
命名空间bdc
{
班级计划
{
静态void Main(字符串[]参数)
{            
//联系
var socket=newtsocket(“hdp1.localdomain”,9090);
var传输=新的TBufferedTransport(套接字);
var协议=新的TBinaryProtocol(传输);
Hbase.Client hba=新的Hbase.Client(协议);
transport.Open();
//获取表名
控制台。写线(“”);
var tableNames=hba.getTableNames();
foreach(tableNames中的var tableName)
WriteLine(Encoding.UTF8.GetString(tableName,0,tableName.Length));
//插入行
控制台。写线(“”);
突变_突变=新突变();
_突变.IsDelete=false;
_mutation.Column=Encoding.UTF8.GetBytes(“image:bodyimage”);
_mutation.Value=Encoding.UTF8.GetBytes(“newimage 2.jpg”);
mutateRow(Encoding.UTF8.GetBytes(“blogposts”)、Encoding.UTF8.GetBytes(“post1”)、新列表{u mutation},null);
//完成
控制台。写线(“”);
Console.ReadKey();
}        
}
}

上述代码与运行在CentOS 7上的最新Hortonworks数据平台的Hbase安装配合得很好。

太棒了!它似乎很古老。在哪里可以获得HBase Sharp的更新版本以支持HBase的最新版本?@DineshKumarP我为.net标准创建了一个以上版本。不幸的是,从thrift-0.9.3.exe开始,我没有得到TAppend、TColumn或TIncrement文件,并且我在VS中收到一个关于找不到命名空间TException的异常。我从版本0.9.2中也得到了相同的结果。我没有用0.9.3进行完整测试(但几天后会完成)。虽然我用最新的0.9.3测试了命令(生成cs文件),但它仍然有效。我拿到了所有的文件。请尝试从您建议的Hbase.thrift文件下载Hbase.thrift以解决问题。谢谢,谢谢。如何使用doAs(模拟)头连接HBase thrift。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Thrift.Protocol;
using Thrift.Transport;

namespace bdc
{
    class Program
    {
        static void Main(string[] args)
        {            
            // Connection
            var socket = new TSocket("hdp1.localdomain", 9090);
            var transport =new TBufferedTransport(socket);
            var protocol = new TBinaryProtocol(transport);
            Hbase.Client hba = new Hbase.Client(protocol);
            transport.Open();            

            // Get table names
            Console.WriteLine("<-GET LIST OF TABLES->");      
            var tableNames = hba.getTableNames();
            foreach (var tableName in tableNames)
            Console.WriteLine(Encoding.UTF8.GetString(tableName, 0, tableName.Length));            

            // Insert rows       
            Console.WriteLine("<-INSERT->");      
            Mutation _mutation = new Mutation();
            _mutation.IsDelete = false;
            _mutation.Column = Encoding.UTF8.GetBytes("image:bodyimage");
            _mutation.Value = Encoding.UTF8.GetBytes("newnew image 2.jpg");

            hba.mutateRow(Encoding.UTF8.GetBytes("blogposts"), Encoding.UTF8.GetBytes("post1"), new List<Mutation> { _mutation }, null);

            // Finished
            Console.WriteLine("<-FINISHED->");  
            Console.ReadKey();                        
        }        
    }
}