如何使用 boto 向等待的 Amazon EMR 作业流添加步骤,而作业流在完成后不会终止?
我在 Amazon 的 Elastic Map Reduce 上创建了一个交互式作业流程并加载了一些表格。当我使用 Boto's 将新步骤传递给作业流程emr_conn.add_jobflow_steps(...)
时,作业流程在完成或失败后终止。
我知道我可以使用run_jobflow
带有keep_alive
参数的 boto 启动作业流程——但我想使用已经在运行的流程。
如何使用 boto 向等待的 Amazon EMR 作业流添加步骤,而作业流在完成后不会终止?
我在 Amazon 的 Elastic Map Reduce 上创建了一个交互式作业流程并加载了一些表格。当我使用 Boto's 将新步骤传递给作业流程emr_conn.add_jobflow_steps(...)
时,作业流程在完成或失败后终止。
我知道我可以使用run_jobflow
带有keep_alive
参数的 boto 启动作业流程——但我想使用已经在运行的流程。
如果它正确完成,它不应该以keep_alive=True
. 也就是说,它通常会在失败时退出,所以你想添加terminate_on_failure="CONTINUE"
你的add_job_steps
论点。
我用这样的东西
创建与
import boto.emr
conn = boto.emr.connect_to_region('us-west-2')
jobid = conn.run_jobflow(name='cluster-name',
ec2_keyname="yourkeyhere",
num_instances=3,
master_instance_type='m1.medium',
slave_instance_type='m1.medium',
keep_alive=True,
)
将作业添加到现有集群(稍等一下集群处于等待状态)
import boto.emr
conn = boto.emr.connect_to_region('us-west-2')
# get the list of waiting cluster and take the first one
jobid = conn.describe_jobflows(states=["WAITING"])[0].jobflowid
print jobid
flow_steps = list()
runThing = boto.emr.step.ScriptRunnerStep(
name="job step name",
step_args = ["s3://yours3bucket/dosmthg.sh"])
flow_steps.append(runThing)
conn.add_jobflow_steps(jobid, flow_steps)
笔记
您也可以使用“KeepJobFlowAliveWhenNoSteps”标志来执行此操作。
response = emr.run_job_flow(
Name="start-my-cluster",
ReleaseLabel="emr-5.3.1",
LogUri='s3://logs',
Instances={
'InstanceGroups': [
{'Name': 'EmrMaster',
'InstanceRole': 'MASTER',
'InstanceType': 'm3.xlarge',
'InstanceCount': 1},
{'Name': 'EmrCore',
'InstanceRole': 'CORE',
'InstanceType': 'm3.xlarge',
'InstanceCount': 2}
],
'Ec2KeyName': 'my-key-name',
'KeepJobFlowAliveWhenNoSteps' : True,
},
Applications=[{'Name': 'Hadoop'}, {'Name': 'Spark'}, {'Name': 'Hive'}],
JobFlowRole='EMR_EC2_DefaultRole',
ServiceRole='EMR_DefaultRole',
VisibleToAllUsers=True,
Steps=[
# steps go here...
]
)