【发布时间】:2010-08-19 20:38:48
【问题描述】:
我正在做一个小项目来熟悉亚马逊网络服务。我正在尝试制作一个简单的网络应用程序;当按下按钮时,将启动 mapreduce 作业并在浏览器上返回输出。 最好的方法是什么?另外,有没有办法通过命令行启动亚马逊弹性 mapreduce 作业?
【问题讨论】:
标签: web-applications amazon-ec2 amazon-web-services mapreduce
我正在做一个小项目来熟悉亚马逊网络服务。我正在尝试制作一个简单的网络应用程序;当按下按钮时,将启动 mapreduce 作业并在浏览器上返回输出。 最好的方法是什么?另外,有没有办法通过命令行启动亚马逊弹性 mapreduce 作业?
【问题讨论】:
标签: web-applications amazon-ec2 amazon-web-services mapreduce
您可以使用编写 Web 应用程序所用的任何语言的 AWS 开发工具包来调用 EMR 以提交作业。我主要使用 python,所以我最熟悉 Python Boto 库,它可以轻松地将代码和数据上传到 s3、配置工作流并启动该工作流。
您不希望启动作业并在同一个 HTTP 请求中返回结果,因为在作业能够运行之前启动集群需要几分钟时间。具有几分钟不响应的页面的 Web 应用程序不是良好的用户体验。然而,仅仅提交一个工作流似乎只需要几秒钟。您需要创建工作流并在您的 Web 应用程序中跟踪工作流 ID。给定一个工作流 ID,当用户返回且工作完成时,从工作流中检索日志数据或输出应该不会有太多麻烦。
以下是如何使用 Boto 启动 Elastic 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])
【讨论】:
你看过了吗? http://developer.amazonwebservices.com/connect/entry.jspa?externalID=873 来自开发人员,可能会对您有所帮助。
【讨论】: