如何手动使 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 步骤失败的主要内容,如果未能解决你的问题,请参考以下文章
寻找有关如何使用 python 启动 AWS EMR 集群以运行 pyspark 步骤的示例
带有 tez 的 aws emr 上的 Pig 脚本偶尔会因 OutOfMemoryException 而失败