#python #boto3 #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.
Кто-нибудь знает простой способ обойти эти проблемы?
Комментарии:
1. Вы определили свою работу с
ExecutionProperty={'MaxConcurrentRuns': 25}
тем , чего вы ожидаете?2. Я полагаю, что мой настоящий вопрос заключается в том, автоматически ли ставятся в очередь задания по клею?
3. Нет, они этого не делают. Если вы превысите свой максимальный лимит одновременного использования, будет выдано исключение
Ответ №1:
Ограничение «Максимальное количество одновременных запусков заданий на учетную запись» является мягким ограничением (https://docs.aws.amazon.com/general/latest/gr/glue.html). Возможно, зарегистрируйте запрос на обслуживание в AWS и попросите увеличить лимит. Во-вторых, я не уверен, как вы реализовали свое действие сна в коде, возможно, вместо того, чтобы просто ловить исключение во время сна каждый раз, когда вы совершаете вызов, если есть исключение, спите с экспоненциальным отступом в секундах и повторите попытку, когда время сна закончится, и повторяйте до тех пор, пока не получите положительный ответ или когда вы достигнете своего собственного установленного предела для остановки. Таким образом, ваша обработка не остановится, пока вы не сдадитесь, а просто замедлится, когда начнется регулирование.