亚马逊弹性地图减少 - 保持服务器活着?

时间:2010-03-25 02:59:02

标签: amazon-web-services mapreduce amazon-emr

我正在EMR中测试工作,每次测试都需要花费很多时间才能启动。有没有办法让Amazon EMR中的服务器/主节点保持活动状态?我知道这可以通过API来完成。但是,我想知道这是否可以在aws控制台中完成?

3 个答案:

答案 0 :(得分:2)

您无法从AWS控制台执行此操作。引用开发者指南

  

AWS管理控制台中的Amazon Elastic MapReduce选项卡不支持向作业流添加步骤。

您只能通过CLI和API执行此操作,方法是创建作业流程,然后向其中添加步骤。

$ ./elastic-mapreduce --create --active --stream

答案 1 :(得分:1)

您不能使用Web控制台执行此操作 - 但通过API和编程工具,您将能够为长时间运行的作业添加多个步骤,这就是我所做的。这样,您可以在同一个长时间运行的集群上逐个启动作业,而无需每次都重新创建新作业。

如果您熟悉Python,我强烈推荐Boto库。其他AWS API工具也允许您这样做。

如果您按照Boto EMR tutorial进行操作,您会找到一些示例:

只是为了给你一个想法,这就是我的工作(使用流媒体工作):

   
# Connect to EMR
conn = boto.connect_emr()

# Start long-running job, don't forget keep_alive setting
jobid = conn.run_jobflow(name='My jobflow',
                          log_uri='s3://<my log uri>/jobflow_logs',
                          keep_alive=True)

# Create your streaming job
step = StreamingStep(...)

# Add the step to the job
conn.add_jobflow_steps(jobid, [step])

# Wait till its complete
while True:
  state = conn.describe_jobflow(jobid).steps[-1].state
  if (state == "COMPLETED"):
    break
  if (state == "FAILED") or (state == "TERMINATED") or (state == "CANCELLED"):
    print >> sys.stderr, ("EMR job failed! Message = %s!") % (state)
    sys.exit(1)
  time.sleep (60)

# Create your next job here and add it to the EMR cluster
step = StreamingStep(...)
conn.add_jobflow_steps(jobid, [step])

# Repeat :)

答案 2 :(得分:0)

保持机器活着的

启动交互式猪会话。然后机器不会关闭。然后,您可以使用以下命令从命令行执行map / reduce逻辑:

cat infile.txt | yourMapper | sort | yourReducer > outfile.txt