我使用AWS EMR进行火花流式传输。我在EMR中添加了一个从Kinesis流中读取数据的步骤。我需要的是一种停止此步骤并添加新步骤的方法。
现在我从Spark驱动程序生成一个线程并收听消息的SQS队列,并在收到消息时调用sparkContext.stop()
。我使用Chef来实现部署自动化。因此,当存在新工件时,将消息放入SQS,EMR读取它并停止该步骤。然后,Chef使用EMR API添加了一个新步骤。
我的问题是,这是在EMR中停止长时间运行的流媒体作业的正确方法吗?如果火花部署在独立集群而不是EMR上,那将如何处理?
答案 0 :(得分:0)
hadoop jar
命令。如果步骤类型为spark,则它将运行spark-submit
命令。当该命令返回0退出代码时,STEP被标记为FINISHED,当它返回任何其他退出代码时,它将被标记为FAILED。状态还可以取决于当前运行的YARN应用程序。目前,您可以测试并观察,如果在此期间有任何正在运行的YARN应用程序(不是由STEP特别生成),EMR将不会标记STEP完成。
因此,在spark-submit上使用主类/ JAR,通过编写自定义代码,您可以通过按下所需的退出代码来达到所需的STEP状态。
通过查看STEP的controller.log,可以找到有关EMR将STEP转换为的命令的更多信息。