0

我正在开展一个小项目,以熟悉亚马逊网络服务。我试图做一个简单的Web应用程序;当一个按钮被按下时,mapreduce作业被启动并且输出在浏览器上被返回。 什么是最好的方法来做到这一点?另外,有没有办法通过命令行启动亚马逊弹性mapreduce作业?远程启动Amazon Elastic MapReduce作业?

回答

2

您可以使用您正在编写Web应用程序的任何语言的AWS SDK来调用EMR来提交作业。我主要使用python工作,所以我最熟悉Python Boto库,这使得将代码和数据上传到s3,配置作业流并启动作业流程非常轻松。

您不会希望启动作业并在相同的HTTP请求中返回结果,因为只有在作业能够运行之前启动集群需要几分钟的时间。网页应用程序的页面不响应分钟不是一个好的用户体验。但是,只提交工作流程似乎只需要几秒钟。您需要创建作业流程,并只需跟踪Web应用程序中的作业流ID。给定一个作业流ID,当用户回来并且作业完成时,您不应该在检索日志数据或从作业流中输出时遇到太多麻烦。

这里是一个可以如何与博托推出的弹性MR作业的例子:

import boto 
from boto.emr.step import StreamingStep 

conn = boto.connect_emr() 
step = StreamingStep(name='My wordcount example', 
        mapper='s3n://elasticmapreduce/samples/wordcount/wordSplitter.py', 
        reducer='aggregate', 
        input='s3n://elasticmapreduce/samples/wordcount/input', 
        output='s3n://<my output bucket>/output/wordcount_output') 
jobid = conn.run_jobflow(name='My jobflow', 
         log_uri='s3://<my log uri>/jobflow_logs', 
         steps=[step]) 
+0

是的,谢谢迈克。最近我也一直在使用python。 boto和paramiko库对于创建集群并将它们运行以运行命令非常有用。 – Kareem 2011-02-24 19:59:25

+0

没问题,Kareem。 :-)那么你是Python中的Web应用程序呢? – stderr 2011-02-24 20:02:22

相关问题