EMR作业长时间运行通知

时间:2019-10-03 13:17:31

标签: amazon-web-services amazon-ec2 amazon-emr

考虑一下,我们大约有30个EMR作业在太平洋标准时间上午5:30至太平洋标准时间10:30运行。 我们有 S3存储桶,我们用来在S3存储桶中接收平面文件,并通过lambda函数将接收到的文件复制到其他目标路径。 一旦在目标路径中接收到数据,我们就有dynamo DB表用于数据处理。 现在的问题是,由于我们具有多个依赖关系和并行执行,有时作业由于内存问题而失败,有时需要更多时间才能完成。 有时它将运行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 个答案:

答案 0 :(得分:1)

使用lambda和aws sdk反复调用步骤列表,例如boto3并检查开始日期。如果晚了1个小时,则可以触发一些通知,例如Amazon SES。参见documentation

例如,您只能为运行步骤调用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)
                }
            }
        },
    ],
    ...
}