如何从.NET连接到Hadoop / Hive

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

显然可以使用非Java解决方案连接到Hadoop – 请参阅我是否必须使用Java编写应用程序?

使用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免责声明:我是作者。

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

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

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

编辑:

  1. 还有Apache templeton,它允许使用Rest接口提交Hive作业(Pig和MR)。 它的问题是它产生另一个map任务来提交Hive作业,这使得它变慢。

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

通过使用Microsoft的ODBC连接器,可以使用C#访问Hive。 下载“ Microsoft.Hadoop.Hive ”的Nuget包,并按照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”作为数据提供程序。

更改数据源对话窗口

  • 在“数据源规范”部分下,选中“使用连接字符串”,然后单击“构建”按钮。

添加连接对话窗口

  • 在“计算机数据源”选项卡下,选择“示例Microsoft Hive DSN”数据源名称,然后单击“确定”按钮。

选择“数据源”对话框窗口

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

Microsoft Hive ODBC驱动程序连接对话窗口

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

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

看看这是否有帮助。 我试图通过C#连接到Hadoop

如何使用.NET / C#通过Hive与Hadoop进行通信

使用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 Thrift客户端有很多例子。

  2. Marlin – Marlin是一个C#客户端,用于与Stargate(HBase REST API)交互,最终成为hbase-sdk-for-net。 我没有亲自针对HBase 1.x +对此进行测试,但考虑到它使用了Stargate,我希望它能够正常工作。 如果您打算使用Stargate并实现自己的客户端,我建议通过Thrift,请确保使用protobufs来避免JSON序列化开销。 使用基于HTTP的方法还可以更轻松地在多个网关上加载平衡请求。

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

  4. Simba HBase ODBC驱动程序 – 使用ODBC连接到HBase。 我听说过这种方法的积极反馈,尤其是来自Tableau等工具。 这不是开源的,需要购买许可证。