我们在hadoop集群中有Spark Batch作业和Spark流作业。
我们希望在同一平台上安排和管理它们。
我们遇到了气流,这符合我们的需求 “创建,计划和监视工作流的平台”。
我只希望能够停止和启动Spark Streaming工作。使用气流图和剖析问题不大。
我的问题是 除了失去一些功能(图形,配置文件)之外,为什么我不应该使用Airflow来运行火花流作业?
我遇到了这个问题: Can airflow be used to run a never ending task?
这说明可能,而不是为什么不应该。
答案 0 :(得分:1)
@mMorozonv看起来不错。如果不存在,则可以让一个DAG启动流。然后使用第二个DAG作为运行状况检查器来跟踪其进度。如果运行状况检查失败,则可以再次触发第一个DAG。
或者,您可以以trigger
[1]的once
间隔运行流。
# Load your Streaming DataFrame
sdf = spark.readStream.load(path="data/", format="json", schema=my_schema)
# Perform transformations and then write…
sdf.writeStream.trigger(once=True).start(path="/out/path", format="parquet")
这为您提供了火花流的所有相同优势,并且具有批处理的灵活性。
您只需将流指向您的数据,此作业将检测自上次迭代以来的所有新文件(使用检查点),运行流批处理,然后终止。您可以触发气流DAG的计划,以适应您希望在任何时候(每分钟,每小时等)处理数据的任何滞后。
我不建议将其用于低延迟要求,但它非常适合每分钟运行。
[1] https://databricks.com/blog/2017/05/22/running-streaming-jobs-day-10x-cost-savings.html
答案 1 :(得分:1)
使用气流分支功能,我们可以设置一个dag,用于调度和监视我们的流媒体作业。 Dag将对应用程序进行状态检查,如果应用程序未运行,Dag将提交流作业。在另一种情况下,可以完成dag的执行,也可以添加一个传感器,该传感器将在一段时间后通过警报和您需要的其他内容检查流作业的状态。
主要有两个问题:
execution_timeout
; 可以通过将cluster
配置参数设置为spark.yarn.submit.waitAppCompletion
的{{1}}模式下的流作业来解决该问题
我们可以使用Yarn检查流式应用程序的状态。例如,我们可以使用命令false
。如果我们的应用程序将在正在运行的应用程序列表中,则不应触发流作业。唯一的办法就是使流作业名称唯一。
答案 2 :(得分:0)
没有严格的理由说明为什么不应该使用Airflow运行Spark Streaming作业。实际上,您可以通过定期记录一些指标来监控您的过程,
LOG.info(query.lastProgress)
LOG.info(query.status)
并在任务日志中查看它们