Работа над ограничениями параллелизма в AWS Glue

#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 и попросите увеличить лимит. Во-вторых, я не уверен, как вы реализовали свое действие сна в коде, возможно, вместо того, чтобы просто ловить исключение во время сна каждый раз, когда вы совершаете вызов, если есть исключение, спите с экспоненциальным отступом в секундах и повторите попытку, когда время сна закончится, и повторяйте до тех пор, пока не получите положительный ответ или когда вы достигнете своего собственного установленного предела для остановки. Таким образом, ваша обработка не остановится, пока вы не сдадитесь, а просто замедлится, когда начнется регулирование.