EMR Job Long Running Уведомления - PullRequest
       22

EMR Job Long Running Уведомления

0 голосов
/ 03 октября 2019

Учтите, что у нас около 30 запусков EMR в 5:30 утра до 10:30 по тихоокеанскому времени. У нас есть S3 Buckets , и мы используем для получения плоских файлов в S3 Bucket и с помощью лямбда-функций, полученные файлы будут скопированы в другие целевые пути. У нас есть динамо-таблицы БД для обработки данных после получения данных в целевом пути. Теперь проблема заключается в том, что у нас несколько зависимостей и параллельное выполнение, иногда задание не выполняется из-за проблемы с памятью, а иногда требуется больше времени для выполнения. Иногда он будет работать в течение 4 или 5 часов, и, наконец, он будет завершен с памятью или другими проблемами, такими как недоступность подсети или проблема EC2. Поэтому мы не хотим ждать до тех пор. Например: Job_A обрабатывает некоторые файлы с 1 по 4, а Job_B обрабатывает файлы с 5 по 10. Вот так все и идет. Здесь Job_B имеет зависимость с Job_A с 3-м файлом. Итак, Job_B будет ждать, пока Job_A будет завершен. Как эта зависимость у нас в нашем процессе. Я хотел бы получать уведомления от EMR Jobs, как показано ниже, например: Среднее время выполнения для Job_A составляет 1 час, но оно работает более 1 часа, и в этом случае мне нужно получить уведомление по электронной почте илиЛюбым другим путем. Как этого добиться? Пожалуйста, помогите или посоветуйте кому-нибудь. С уважением, Картик

1 Ответ

1 голос
/ 03 октября 2019

Повторно вызовите список шагов, используя lambda и aws sdk, например, boto3, и проверьте дату начала. Когда он отстает на 1 час, вы можете вызвать некоторые уведомления, такие как Amazon SES. См. документацию .

Например, вы можете вызвать list_steps только для текущих шагов.

response = client.list_steps(
    ClusterId='string',
    StepStates=['RUNNING']
)

Тогда вам будет дан ответ ниже.

{
    'Steps': [
        {
            ...

            'Status': {

                ...

                'Timeline': {
                    'CreationDateTime': datetime(2015, 1, 1),
                    'StartDateTime': datetime(2015, 1, 1),
                    'EndDateTime': datetime(2015, 1, 1)
                }
            }
        },
    ],
    ...
}
...