如何从.NET连接到Hadoop / Hive

时间:2010-08-16 14:03:02

标签: c# hadoop hive

我正在开发一个解决方案,我将有一个运行Hive的Hadoop集群,我希望从.NET应用程序发送作业和配置单元查询以进行处理,并在完成后收到通知。除了直接从Java应用程序以外,我找不到任何与Hadoop接口的解决方案,是否有我可以访问的API,我只是没有找到?

7 个答案:

答案 0 :(得分:10)

显然可以使用非Java解决方案连接到Hadoop - 请参阅Do I have to write my application in Java?

答案 1 :(得分:8)

使用Hadoop:没有直接的方式从C#连接,因为Hadoop通信层只与Java一起使用,而不是跨平台。它可能是非常不平凡的。 我知道有一个补丁可以为Hadoop添加Protocol Buffers支持,但是在撰写本文时(2011年8月)还没有发布。

Hive的情况比较好,因为Hive有Thrift接口支持C#。您可以自己下载Hive Thrift界面并生成C#客户端,但要注意它需要对生成的代码进行一些黑客攻击。相反,我建议您从https://bitbucket.org/vadim/hive-sharp/downloads/hive-sharp-lib.dll下载dll或使用Nuget包管理器,搜索“hive”:http://nuget.org/List/Packages/Hive.Sharp.Lib 免责声明:我是作者。

答案 2 :(得分:7)

  1. 有Hortonworks ODBC驱动程序。我没有亲自使用它,但它可以让你像任何其他ODBC数据源一样使用配置单元。安装ODBC驱动程序后,可以使用OdbcConnection类连接到Hive。

  2. 如其他答案所述 - 您可以使用Thrift api。为此,您需要从接口定义文件生成C#类,您可以从Hive源存储库下载它们。这种方法对我有用。

  3. 您可以使用IKVM将hadoop客户端java库转换为可以从C#中使用的.Net程序集。我没有将IKVM与Hive客户端一起使用,但我已经对其他一些hadoop客户端库进行了IKVM,并且令人惊讶的是它有效。

  4. 修改

    1. 还有Apache templeton,它允许使用Rest界面提交Hive作业(Pig和MR)。问题在于它产生了另一个地图任务来提交Hive作业,这使得它变慢。

答案 3 :(得分:3)

Thrift API也是其他语言访问hdfs和hive的另一种方式

答案 4 :(得分:3)

可以通过使用Microsoft的ODBC连接器来利用C#访问Hive。下载Nuget软件包,用于" Microsoft.Hadoop.Hive "并按照http://msdn.microsoft.com/en-us/library/dn749834.aspx

提供的示例进行操作

诀窍在于构建连接字符串以与其连接。我想出的最好方法是下载Microsoft Hive ODBC驱动程序(http://www.microsoft.com/en-us/download/details.aspx?id=40886),安装它,然后使用Visual Studio内部的服务器资源管理器添加新连接,然后为我构建连接字符串。为此,我使用了以下步骤:

  • 将数据源更改为" Microsoft ODBC数据源"并确保您使用" .NET Framework数据提供程序用于ODBC"作为数据提供者。

Change Data Source Dialog Window

  • 根据"数据源规范"部分,检查"使用连接字符串"然后点击" Build"按钮。

Add Connection Dialog Window

  • 在"机器数据源"选项卡,选择"示例Microsoft Hive DSN"数据源名称,然后单击"确定"按钮。

Select Data Source Dialog Window

  • 一个标题为" Microsoft Hive ODBC Driver Connection对话框的窗口"会打开的。输入可选描述,然后键入Hive服务器的路径,您将使用的端口以及它应连接到的数据库。指示Hive服务器类型,并指定要使用的身份验证机制,然后填写相应的字段。

Microsoft Hive ODBC Driver Connection Dialog Window

  • 最后,点击"测试"底部的按钮可确保您能够成功连接。如果成功,请单击"确定"按钮,然后您将回到"修改连接"窗口。在此处输入您的Hive服务的登录信息。

使用此数据源或复制它为您构建的连接字符串,并在您的应用程序中使用它。

答案 5 :(得分:1)

看看这是否有帮助。我试图通过C#

连接到Hadoop

How to communicate to Hadoop via Hive using .NET/C#

答案 6 :(得分:0)

使用https://hbasenet.codeplex.com/

中的Hbase.Net库

然后你可以连接到hbase / hive,如下所示:

        Client c = new Client("10.20.14.179", 9090, 1000000);

        var cli = c.TotalClients;

        var tableList = c.GetTableNames();

仅供参考,我们正在使用hortonworks沙箱并且连接正常。

在上面的示例中,10.20.14.179是主机,9090是端口。

另外,以下内容可能有助https://community.hortonworks.com/questions/25101/is-there-a-way-to-connect-to-hbase-using-c.html

没有本机C#HBase客户端。但是,有几种方法可以与C#中的HBase进行交互。

  1. C#HBase Thrift客户端 - Thrift允许定义服务端点 和通用格式的数据模型,并使用代码生成器 创建特定于语言的绑定。 HBase提供了Thirft服务器和 定义。在线创建C#HBase有很多例子 节俭客户端。

  2. Marlin - Marlin是一个C#客户端,用于与Stargate(HBase REST API)最终成为hbase-sdk-for-net。我还没有 亲自测试了这个针对HBase 1.x +,但考虑到它使用 星际之门,我希望它应该有效。如果您打算使用 星际之门并实施您自己的客户,我建议您这样做 Thrift,请确保使用protobufs来避免JSON序列化 高架。使用基于HTTP的方法也使得它更容易 通过多个网关负载均衡请求。

  3. Phoenix Query Server - Phoenix是HBase上的SQL皮肤。凤凰查询 Server是一个REST API,用于向Phoenix提交SQL查询。这是 一些示例代码,但是,我还没有测试过它。

  4. Simba HBase ODBC驱动程序 - 使用ODBC连接到HBase。我听说 这种方法的积极反馈,特别是来自像这样的工具 画面。这不是开源的,需要购买许可证。