如何手动使 AWS EMR 步骤失败

Posted

技术标签:

【中文标题】如何手动使 AWS EMR 步骤失败【英文标题】:How to manually make an AWS EMR step fail 【发布时间】:2016-08-23 11:27:58 【问题描述】:

我遇到了一个问题并想到了一个我没有找到好的答案的问题。也就是说,我怎样才能故意使 AWS EMR 步骤失败? 我有一个 Spark Scala 脚本,它作为带有一些命令行参数的 Spark 步骤添加,并且脚本的输出被写入 S3。

但是,如果在读取和处理命令行参数时出现问题,则会跳过脚本的逻辑并结束脚本。但对于 EMR,这是正常行为,它不知道没有输入 if 块。

在“失败”运行之后,步骤状态仍然更改为“已完成”,似乎成功了,但没有将结果写入 S3。

我想完成该步骤,使其处于“失败”状态。

我可以通过抛出异常来做到这一点,然后我可以在 EMR Step 错误日志中看到相应的异常以及我的消息。但是有更好的方法吗?我想自己手动处理所有异常。

此外,我可以使用 AWS SDK 以某种方式以编程方式找出步骤失败的原因吗?

【问题讨论】:

【参考方案1】:

从您的程序中返回一个非零值

【讨论】:

不幸的是,我目前无法再访问 AWS EMR(并且认为设置个人 AWS 账户只是为了测试这个答案没有任何意义,所以我将其标记为正确)有道理。如果有人可以对此进行测试,我将不胜感激! 嗨,我遇到了类似的问题,但在我的情况下,我在返回 -1 (System.exit(-1)) 之前在 dynamoDB 中插入了一条日志消息。该步骤失败,但 dynamoDB 中的这条记录被插入了两次。【参考方案2】:

要故意使 EMR 步骤失败,您总是可以放置一个愚蠢的逻辑,这可能会使代码在运行时失败。

对于 pyspark,我们将一段代码设置为 a=5/0。这将使代码失败。 否则,您可以提供甚至不存在的 S3 路径之类的东西。这也会导致运行时作业失败。

您可以编写 exit(1) 以从您的代码中返回一个非零值,从而使 EMR 步骤失败。

【讨论】:

以上是关于如何手动使 AWS EMR 步骤失败的主要内容,如果未能解决你的问题,请参考以下文章

AWS EMR实例组竞价实例扩展失败切换按需实例方法

AWS EMR 火花提交选项 - 失败

寻找有关如何使用 python 启动 AWS EMR 集群以运行 pyspark 步骤的示例

带有 tez 的 aws emr 上的 Pig 脚本偶尔会因 OutOfMemoryException 而失败

toPandas() 在 Jupyter iPython Notebook 上工作,但提交失败 - AWS EMR

EMR 集群创建在步骤中失败