如何使用C#连接HBase / Hadoop数据库

时间:2013-07-25 19:03:00

标签: c# hadoop hbase hive hdinsight

最近,探索Microsoft HDInsight Hadoop for Windows.But不知道从哪里开始,并开始使用apache hadoop与c#/ asp.net mvc。

我知道http://hadoopsdk.codeplex.com/是最好的资源,但无法找到从头开始的文档?比如创建集群,数据库,然后将其连接到C#app。

4 个答案:

答案 0 :(得分:5)

最简单的入门方法是使用HDInsight service on Azure(仍在预览中,但效果很好)。这样,您就可以登录您的天蓝色门户网站并启动一个群集,该群集将链接到您的天蓝色存储区。

如果您真的不想访问云,那么您可以通过web platform installer下载HDInsight开发人员预览包,这将创建单节点本地群集。或者,如果您对'just hadoop'感兴趣,那么您可以尝试使用Hortonworks或Cloudera提供的VM。

之后,如果您熟悉SQL,那么可能值得从Hive开始。 O'Reilly Definitive Guide to Hadoop非常好。

从.NET的角度来看,codeplex上的hadoopsdk是一个很好的起点。

就非常基本的连接示例而言,请尝试this blog作为示例,但请注意,HDInsight的连接略有不同,因为现在全部都使用了templeton接口,所以这样就可以了:

var db = new HiveConnection(
        webHCatUri: new Uri("http://localhost:50111"),
        userName: (string) "hadoop", password: (string) null);
var result = db.ExecuteHiveQuery("select * from w3c");

如果您希望在HDInsight上完成MapReduce,那么您可能希望在codeplex上查看带有sdk的C#MapReduce示例。

请注意,默认的HDInsight安装还附带了一些很好的示例,其中包括一些可以使用的数据以及一些PowerShell脚本和.NET代码,以帮助您入门。

享受!

答案 1 :(得分:1)

您可能会发现项目 HBase-sharp 很有用。您可以访问他们的bitbucket page获取详细信息。看起来很有希望。它还包括一个例子。你可以找到它here

HTH

答案 2 :(得分:1)

答案 3 :(得分:0)

微软于6月在Nuget.org上发布了他们.NET ProtoBuf client for Phoenix/Hbase的预览版。我发现它运行良好,但API对我来说并不熟悉。据我所知,我实现了.NET Framework System.Data IDbConnection,IDbCommand等围绕它的包装API,名为Garuda.Data。它使得从.NET代码访问Phoenix / Hbase感觉就像SQL Server的SqlConnection,SqlCommand等 - 检查出来:https://www.nuget.org/packages/Garuda.Data/

这是github项目回购:https://github.com/dwdii/GarudaUtil

一些示例代码:

using (IDbConnection phConn = new PhoenixConnection())
{
    phConn.ConnectionString = cmdLine.ConnectionString;

    phConn.Open();

    using (IDbCommand cmd = phConn.CreateCommand())
    {
        cmd.CommandText = "SELECT * FROM GARUDATEST";
        using (IDataReader reader = cmd.ExecuteReader())
        {
            while(reader.Read())
            {
                for(int i = 0; i < reader.FieldCount; i++)
                {
                    Console.WriteLine(string.Format("{0}: {1}", reader.GetName(i), reader.GetValue(i)));
                }
            }
        }
    }                        
}