是否可以使用.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。
答案 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。
建议使用此方法是在群集计算机上安装软件。您可能会在集群计算机上使用它来安装.NET运行时环境(可能是Mono而不是Microsoft,因为我想所有的Elastic MapReduce计算机都运行Linux)。 (不确定无人值守的安装会有多难。有什么想法吗?)完成后,你可以使用Hadoop流来调用你的.NET映射器/缩减器,Elastic MapReduce似乎支持它。
答案 3 :(得分:0)
您应该能够使用任何.NET语言中的VB.NET library,包括C#。