簡體   English   中英

AWS Glue Pyspark,結束有條件的工作?

[英]AWS Glue Pyspark, End a job with a condition?

似乎是一項簡單的任務,但我無法找到文檔以查看是否可行。 基本上,我有一個每小時運行一次的粘合作業,並搜索一個文件夾以查看數據是否已上傳。 在某些情況下,過去一小時內沒有上傳任何數據,因此當 Glue 函數運行並看到沒有數據時,我希望它終止。 那可能嗎? 這是一些偽代碼來說明我的意思:

def fn(input):
    *fetches list of data*
    return (list of data)

list_of_data = fn(input)
if list_of_data is None:
    Terminate Job

是的,正如 bdcloud 正確提到的,我們可以直接從 Lambda 觸發 Glue 作業。 在登陸文件夾上創建事件觸發器,並在上傳文件時觸發粘合作業。 請在此處找到 AWS Lambda 的代碼片段:

from __future__ import print_function
import json
import boto3
import time
import sys
import time
from datetime import datetime

s3 = boto3.client('s3')
glue = boto3.client('glue')

def lambda_handler(event, context):
    gluejobname="<< THE GLUE JOB NAME >>"

    try:
        runId = glue.start_job_run(JobName=gluejobname)
        status = glue.get_job_run(JobName=gluejobname, RunId=runId['JobRunId'])
        print("Job Status : ", status['JobRun']['JobRunState'])
    except Exception as e:
        print(e)
        print('Error getting object {} from bucket {}. Make sure they exist '
              'and your bucket is in the same region as this '
              'function.'.format(source_bucket, source_bucket))
    raise e

我們在生產環境中進行了此設置,並在過去 1.5 年中成功運行。

謝謝,

尤瓦

如果您的源是 s3,那么您甚至不需要每小時運行一次 Glue 作業來確定源 s3 存儲桶中的文件是否有任何上傳/更改。

您可以利用 s3 lambda 觸發器,如果​​有任何上傳到 s3,它實際上會觸發您的 Glue 作業。 一旦 lambda 觸發,您就可以開始您的 Glue 作業。 查看視頻了解更多信息。

這樣,您只能在每小時上傳一次時才能運行 Glue 作業。

如果您仍然希望每小時運行一次 Glue 作業,那么您可以使用 Glue 作業書簽,它只在每次運行時處理最新數據。

您概述的偽代碼可以工作,因為我過去運行過類似的工作。

但是,我發現以這種方式使用的 Glue 作業很昂貴,因為即使您的作業運行不到一分鍾(尤其是在沒有文件的情況下),您仍需為第一個 10 分鍾的使用塊付費。

成本更高的替代方案(但更復雜,因為您將同時使用 S3 事件、SQS 和 Lambda)是執行以下操作:

  1. 在 S3 中設置一個事件通知,監視相關文件夾中的 PUT 事件,該事件將向 SQS(簡單隊列服務)發送消息。
  2. 將 SQS 隊列的消息保留期設置為 1 小時(或您運行 Glue 作業的任何時間段)。 這樣,消息最多只能在隊列中停留 1 小時。
  3. 創建一個 Lambda 作業來檢查 SQS 隊列中的消息(使用 boto3)。 基本上,您會將您擁有的偽代碼放在 Lambda 而不是 Glue 中。 如果有消息(這意味着該時間段內至少有 1 個文件已到達),則觸發 Glue 作業進行處理。 如果沒有,請執行操作並退出。

上述方法將為您節省$$。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM