2017-05-18 1 views
0

J'ai mis en place quelques dags, qui finissent par se terminer par une commande spark-submit pour un cluster spark. J'utilise le mode cluster si cela fait une différence. Quoi qu'il en soit, mon code fonctionne, mais j'ai réalisé que si l'étincelle devait échouer, je ne le saurais pas nécessairement à partir de l'interface utilisateur d'Airflow. En déclenchant le travail en mode cluster, Airflow transmet le travail à un travailleur disponible, donc le flux d'air n'a aucune connaissance de l'étincelle.Comment surveiller le travail Spark avec Airflow

Comment puis-je résoudre ce problème?

Répondre

1

Vous pouvez envisager d'utiliser le mode client, car le client ne se terminera pas tant que le travail d'étincelle n'est pas terminé. L'exécuteur Airflow peut récupérer le code de sortie.

Sinon, vous devrez peut-être utiliser un serveur de travaux. Consultez https://github.com/spark-jobserver/spark-jobserver

+0

Nous l'avons considéré, mais n'aurions-nous pas besoin de notre boîte de flux d'air pour faire partie du cluster Spark si nous devions utiliser le mode 'client'? Je suis encore nouveau sur Spark, quand nous avons essayé le mode 'client', aucun travail n'a été lancé avant que je commence le travail Spark sur cette boîte. – luckytaxi

+0

Vous devrez exécuter 'spark-submit' sur le même hôte que Airflow worker. Ce noeud de travail doit pouvoir communiquer avec le cluster Spark. –

0

Airflow (de la version 1.8) a

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 

Si vous utilisez, la tâche du flux d'air échouera si l'échec d'un travail d'allumage. Vous devrez peut-être modifier la partie de journalisation dans le fichier spark_submit_hook si vous utilisez spark1.x pour obtenir des journaux en temps réel, car spark-submit consigne même les erreurs dans stdout pour certaines versions 1.x (j'ai dû effectuer des modifications pour la version 1.6). 1).

Notez également qu'il y a eu de nombreuses améliorations apportées à SparkSubmitOperator depuis la dernière version stable.