如何使用Airflow监控Spark作业

时间:2017-05-18 04:38:05

标签: apache-spark airflow apache-airflow

我设置了几个dag,最终以spark-submit命令结束到一个火花簇。我正在使用群集模式,如果这有所不同。无论如何,所以我的代码工作,但我意识到如果火花工作失败,我不一定会在Airflow UI中知道。通过集群模式触发作业,Airflow将作业交给可用的工作人员,因此气流不了解火花作业。

我该如何解决这个问题?

3 个答案:

答案 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 秒时继续轮询您的作业状态,确保为您提供正确的作业状态。