我设置了几个dag,最终以spark-submit命令结束到一个火花簇。我正在使用群集模式,如果这有所不同。无论如何,所以我的代码工作,但我意识到如果火花工作失败,我不一定会在Airflow UI中知道。通过集群模式触发作业,Airflow将作业交给可用的工作人员,因此气流不了解火花作业。
我该如何解决这个问题?
答案 0 :(得分:3)
您可以考虑使用client
模式,因为客户端在spark任务完成之前不会终止。气流执行者可以拿起退出代码。
否则您可能需要使用作业服务器。查看https://github.com/spark-jobserver/spark-jobserver
答案 1 :(得分:3)
Airflow(来自版本1.8)
SparkSqlOperator - https://github.com/apache/incubator-airflow/blob/master/airflow/contrib/operators/spark_sql_operator.py ;
SparkSQLHook code - https://github.com/apache/incubator-airflow/blob/master/airflow/contrib/hooks/spark_sql_hook.py
SparkSubmitOperator - https://github.com/apache/incubator-airflow/blob/master/airflow/contrib/operators/spark_submit_operator.py
SparkSubmitHook code - https://github.com/apache/incubator-airflow/blob/master/airflow/contrib/hooks/spark_submit_hook.py
如果使用这些,如果火花作业失败,气流任务将失败。如果使用spark1.x来获取实时日志,则可能必须更改spark_submit_hook文件中的日志记录部分,因为spark-submit甚至会将某些1.x版本的错误记录到stdout(我必须对1.6进行更改)。 1)。
另请注意,自上次稳定发布以来,SparkSubmitOperator已经有了很多改进。
答案 2 :(得分:0)
您可以开始利用负责监控作业的 LivyOperator, LivyOperator 将按您配置为轮询的时间间隔轮询 Spark 作业的状态。 示例:
kickoff_streamer_task = LivyOperator(
task_id='kickoff_streamer_task',
dag=dag,
livy_conn_id='lokori',
file='abfs://data@amethiaprime.dfs.core.windows.net/user/draxuser/drax_streamer.jar',
**polling_interval=60**, # used when you want to pull the status of submitted job
queue='root.ids.draxuser',
proxy_user='draxuser',
args=['10', '3000'],
num_executors=4,
conf={
'spark.shuffle.compress': 'false',
'master': 'yarn',
'deploy_mode': 'cluster',
'spark.ui.view.acls': '*'
},
class_name='com.apple.core.drax.dpaas.batch.DraxMatrixProducer',
on_success_callback=livy_callback,
on_failure_callback=_failure_callback
)
在上面的例子中, polling_interval 设置为 60 秒,它会在 60 秒时继续轮询您的作业状态,确保为您提供正确的作业状态。