[英]Java Client for AWS EMR, listSteps doesn't show the latest step
我正在运行一个Java作业,该作业启动AWS EMR并在其上运行步骤。 在将步骤添加到EMR之后,我调用listSteps
函数以获取步骤的状态并等待它们全部完成/失败。
我注意到有时函数listSteps
不包含我添加后的最后一步,如果我在添加它后立即调用它的话。 这让我认为所有步骤都已完成,而实际上最新步骤甚至还没有开始。
listSteps
之前“睡眠”以外的listSteps
? 我正在使用Amazon SDK中的“ AmazonElasticMapReduceClient”类。
对于这种问题,我认为没有神奇的解决方法。 许多AWS调用都是异步的。 例如,启动EC2计算机将立即返回,然后您必须轮询以查看实例是否启动。 我认为只要进行一些设计,就不会有太大的问题。 我看到几个选择:
创建集群并添加作业步骤时,您知道要向集群添加多少作业步骤以及要添加的作业步骤,因此可以启动新线程并监视群集中所有要添加的步骤(以psuedocode表示) :
function createCluster(steps, callback):
aws.runJobFlow(...)
on new thread:
while(steps != aws.listSteps(...)):
sleep()
callback()
然后,状态检查(以查看作业是否完成)中listSteps()
就是调用listSteps()
并检查状态。 那可能是最简单的解决方案。
另一个设计选项是您有一个作业步骤,通知您软件进度或作业成功完成。 此设计选项将是异步的,并且不需要轮询。 例如,创建一个名为notify
的作业步骤。 然后,您可以像
每个通知步骤可以在作业流上列出listSteps(),以查看先前步骤的结果并更新数据库,向服务发送消息或根据作业的进度更新缓存。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.