【问题标题】:How to end or fail AWS Glue job with error?如何以错误结束或失败 AWS Glue 作业?
【发布时间】:2018-01-30 10:02:34
【问题描述】:

考虑一个 AWS Glue 作业 sn-p:

val input = glueContext
  .getCatalogSource(database = "my_db", tableName = "my_table")
  .getDynamicFrame()
val myLimit = 10    
if (input.count() <= myLimit) {
  // end glue job here with error
}
// continue execution

如何以错误状态退出作业?如果我只是跳过执行,它只会以成功结束;如果我抛出异常,它会因异常而失败。我可以调用一些东西来停止具有失败/错误状态的作业但不引发异常吗?

更新

乍一看我可以:

val spark: SparkContext = SparkContext.getOrCreate()
val glueContext: GlueContext = new GlueContext(spark)
val jobId = GlueArgParser.getResolvedOptions(sysArgs, Seq("JOB_ID").toArray)("JOB_ID")
spark.cancelJob(jobId)

但是:

  1. SparkContext 来自内部框架,结束工作可能会导致不可预测(不稳定)的结果。
  2. org.apache.spark.SparkContext#cancelJob 接收 Int 而 AWS Glue 有一个 String JOB_ID 像这样:j_aaa11111a1a11a111a1aaa11a11111aaa11a111a1111111a111a1a1aa111111a。所以不能直接传给cancelJob

【问题讨论】:

  • 为什么不抛出 RuntimeException ?
  • 为什么在没有堆栈跟踪的情况下不结束工作? ;)
  • 知道如何在不使用爬虫的情况下直接从数据库(jdbc)读取数据吗?可以使用 getSource 方法,但如何正确指定 JsonOptions?任何帮助都会有所帮助。可用于 scala 的文档非常少
  • 嘿嘿,我来填补你的痛苦。 :) 我没有尝试 jdbc,但爬虫不用于创建连接。它们用于扫描您的数据并在胶水数据湖中构建表。它们与任何数据读取无关。 :) 看看this
  • print(error) 后跟 job.commit() 怎么样?

标签: scala amazon-web-services aws-glue


【解决方案1】:

这是写成 pyspark,因为这是我所知道的

args = getResolvedOptions(
   sys.argv, ["TempDir", "JOB_NAME"]
)
job = Job(glue_context)
job.init(args["JOB_NAME"], args)

if my_check() == False:
    # you can use any other exit code and glue will still report failure
    # because the job is not committed
    sys.exit(0)

do_normal_stuff()
job.commit()

火花作业和胶水作业是不同的东西,这就是为什么不能互换它们的 ID。

【讨论】:

    猜你喜欢
    • 2021-12-23
    • 2018-01-30
    • 2021-08-13
    • 2018-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-19
    相关资源
    最近更新 更多