【问题标题】:EMR Job Long Running NotificationsEMR 作业长时间运行通知
【发布时间】:2019-10-03 21:49:06
【问题描述】:

假设我们有大约 30 个 EMR 作业在太平洋标准时间上午 5:30 到 10:30 PST 运行。 我们有 S3 存储桶,用于接收 S3 存储桶中的平面文件,并通过 lambda 函数将接收到的文件复制到其他目标路径。 一旦在目标路径中接收到数据,我们就有用于数据处理的发电机数据库表。 现在的问题是因为我们有多个依赖项和并行执行,有时作业会由于内存问题而失败,有时需要更多时间才能完成。 有时它会运行 4 或 5 个小时,最后会因内存或任何其他问题(如子网不可用或 EC2 问题)而终止。所以我们不想等到那么久。 例如:Job_A 处理第 1 到第 4 个文件,而 Job_B 处理第 5 到第 10 个文件。就这样过去了。 这里 Job_B 依赖于 Job_A 和第三个文件。因此,Job_B 将等到 Job_A 完成。就像我们在流程中存在的这种依赖一样。 我想收到来自 EMR Jobs 的通知,如下所示, 例如:Job_A 的平均运行时间为 1 小时,但运行时间超过 1 小时,在这种情况下,我需要通过电子邮件或任何其他方式得到通知。 如何实现?请帮助或建议任何人。 问候, 卡提克

【问题讨论】:

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


    【解决方案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)
                    }
                }
            },
        ],
        ...
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-06-29
      • 1970-01-01
      • 2021-12-07
      • 2020-04-26
      • 1970-01-01
      • 1970-01-01
      • 2019-06-06
      相关资源
      最近更新 更多