解决 AWS Glue 中的并发限制
Working Around Concurrency Limits in AWS Glue
我对如何最好地管理 AWS glue 中的并发作业实例有疑问。
我有一个这样定义的工作:
job = client.create_job(
Name='JOB_NAME',
Role='the-role-name',
ExecutionProperty={
'MaxConcurrentRuns': 25
},
Command={'Name': 'glueetl',
'ScriptLocation': script_location,
'PythonVersion': '3'},
Tags={'Application': 'app',
'Project': 'proj'},
GlueVersion='2.0',
WorkerType='G.2X',
NumberOfWorkers=50
)
我想像这样调用此作业的大约 1000 个实例:
def run_job(f):
response = client.start_job_run(
JobName = JOB_NAME,
Arguments = {
'--start_date': start_date,
'--end_date': end_date,
'--factor': f} )
return response
for f in factors:
response = run_job(f)
print(f"response: {response}")
这种方法的问题是#1 立即触发所有这些请求会引发节流错误,#2 如果我在作业启动之间休眠,我仍然运行 达到并发限制 50。
有人知道解决这些问题的简单方法吗?
“每个帐户的最大并发作业运行数”限制是软限制 (https://docs.aws.amazon.com/general/latest/gr/glue.html)。也许向 AWS 记录服务请求并要求增加限制。第二件事是我不确定你是如何在代码中实现你的睡眠动作的,也许不是每次调用时只做一个睡眠捕获异常,如果有异常,在几秒钟内以指数退避休眠并且当睡眠时间结束时再试一次并重复直到你得到肯定的回应或者当你达到你自己设定的停止限制时。这样你的处理就不会停止,直到你放弃,而只是在节流开始时放慢速度。
我对如何最好地管理 AWS glue 中的并发作业实例有疑问。
我有一个这样定义的工作:
job = client.create_job(
Name='JOB_NAME',
Role='the-role-name',
ExecutionProperty={
'MaxConcurrentRuns': 25
},
Command={'Name': 'glueetl',
'ScriptLocation': script_location,
'PythonVersion': '3'},
Tags={'Application': 'app',
'Project': 'proj'},
GlueVersion='2.0',
WorkerType='G.2X',
NumberOfWorkers=50
)
我想像这样调用此作业的大约 1000 个实例:
def run_job(f):
response = client.start_job_run(
JobName = JOB_NAME,
Arguments = {
'--start_date': start_date,
'--end_date': end_date,
'--factor': f} )
return response
for f in factors:
response = run_job(f)
print(f"response: {response}")
这种方法的问题是#1 立即触发所有这些请求会引发节流错误,#2 如果我在作业启动之间休眠,我仍然运行 达到并发限制 50。
有人知道解决这些问题的简单方法吗?
“每个帐户的最大并发作业运行数”限制是软限制 (https://docs.aws.amazon.com/general/latest/gr/glue.html)。也许向 AWS 记录服务请求并要求增加限制。第二件事是我不确定你是如何在代码中实现你的睡眠动作的,也许不是每次调用时只做一个睡眠捕获异常,如果有异常,在几秒钟内以指数退避休眠并且当睡眠时间结束时再试一次并重复直到你得到肯定的回应或者当你达到你自己设定的停止限制时。这样你的处理就不会停止,直到你放弃,而只是在节流开始时放慢速度。