如何在AWS EMR中停止长时间运行的火花流程步骤

时间:2016-09-13 15:59:41

标签: amazon-web-services apache-spark spark-streaming emr amazon-emr

我使用AWS EMR进行火花流式传输。我在EMR中添加了一个从Kinesis流中读取数据的步骤。我需要的是一种停止此步骤并添加新步骤的方法。

现在我从Spark驱动程序生成一个线程并收听消息的SQS队列,并在收到消息时调用sparkContext.stop()。我使用Chef来实现部署自动化。因此,当存在新工件时,将消息放入SQS,EMR读取它并停止该步骤。然后,Chef使用EMR API添加了一个新步骤。

我的问题是,这是在EMR中停止长时间运行的流媒体作业的正确方法吗?如果火花部署在独立集群而不是EMR上,那将如何处理?

1 个答案:

答案 0 :(得分:0)

此时的EMR STEP API,不支持STOPPING。提交步骤时,EMR通常会使用您提供的参数运行hadoop jar命令。如果步骤类型为spark,则它将运行spark-submit命令。当该命令返回0退出代码时,STEP被标记为FINISHED,当它返回任何其他退出代码时,它将被标记为FAILED。状态还可以取决于当前运行的YARN应用程序。目前,您可以测试并观察,如果在此期间有任何正在运行的YARN应用程序(不是由STEP特别生成),EMR将不会标记STEP完成。

因此,在spark-submit上使用主类/ JAR,通过编写自定义代码,您可以通过按下所需的退出代码来达到所需的STEP状态。

通过查看STEP的controller.log,可以找到有关EMR将STEP转换为的命令的更多信息。