是否可以使用.NET为Amazon Elastic MapReduce编写map / reduce作业?

时间:2009-07-27 20:50:17

标签: .net amazon-ec2 mapreduce

是否可以使用.NET语言为Amazon Elastic MapReduce(http://aws.amazon.com/elasticmapreduce/)编写map / reduce作业?特别是我想使用C#。

初步研究表明没有。上面的URL的营销文本表明你有“Java,Ruby,Perl,Python,PHP,R或C ++的选择”,而没有提到.NET语言。这个亚马逊线程(http://developer.amazonwebservices.com/connect/thread.jspa?messageID=136051 - “支持C#/ F#map / reducers”)明确表示“目前Amazon Elastic MapReduce不支持Mono平台或C#或F#等语言。”

以上表明无法完成。我想知道是否有任何变通方法。例如,我可以为我的帐户修改Elastic MapReduce机器图像,并在那里安装Mono吗?

亚马逊常见问题解答“使用您的Jar所需的其他软件”(http://docs.amazonwebservices.com/ElasticMapReduce/latest/DeveloperGuide/index.html?CHAP_AdvancedTopics.html)和“如何使用Mapper或Reducer使用其他文件和库”(http://docs.amazonwebservices.com/ElasticMapReduce/latest/DeveloperGuide/index.html?addl_files.html)建议的替代方法是使Map / Reduce作业的第一步是在本地实例上安装Mono。这听起来有点低效,但也许它可以起作用?

也许一个更好的选择是尝试放弃Elastic MapReduce的便利性,并在EC2上手动设置我自己的Hadoop集群。然后我假设我可以毫无困难地安装Mono。

4 个答案:

答案 0 :(得分:5)

可能有一种可能的解决方法是使用Hadoop流式传输并使用Ahead Of Time编译器将C#代码编译为本机代码(检查:http://www.mono-project.com/AOT)。我猜这个二进制文件可以像C ++程序一样从S3运行。

Reed Copsey的答案不正确。 VB.NET库用于创建作业,起始&停止它们,但不是关于Hadoop作业中实际运行的代码。

答案 1 :(得分:3)

是的,可以像以前的回答者建议的那样使用Bootstrap操作。

博客文章 - http://atbrox.com/2011/02/07/an-example-of-using-f-and-c-netmono-with-amazons-elastic-mapreduce-hadoop/ - 介绍了如何使用C#映射器和带单声道的F#reducer

答案 2 :(得分:2)

Elastic MapReduce现在有一个“引导动作”功能,亚马逊目前解释如下:

  

引导操作是一种允许您在Elastic MapReduce实例上运行脚本的机制   在Hadoop开始之前。 Bootstrap操作脚本存储在Amazon S3中并传递给Amazon   创建新作业流时弹性MapReduce。从中下载引导操作脚本   Amazon S3并在执行作业流之前在每个实例上执行。

     

Bootstrap操作脚本可以使用已在作业流程上安装的任何语言编写   实例,包括Ruby,Python,Perl和bash。

(见http://docs.amazonwebservices.com/ElasticMapReduce/latest/DeveloperGuide/index.html?introduction.html

建议使用此方法是在群集计算机上安装软件。您可能会在集群计算机上使用它来安装.NET运行时环境(可能是Mono而不是Microsoft,因为我想所有的Elastic MapReduce计算机都运行Linux)。 (不确定无人值守的安装会有多难。有什么想法吗?)完成后,你可以使用Hadoop流来调用你的.NET映射器/缩减器,Elastic MapReduce似乎支持它。

答案 3 :(得分:0)

您应该能够使用任何.NET语言中的VB.NET library,包括C#。