Exécution du programme Spark job

j'ai une tâche Spark qui lit une table source, fait un certain nombre de map / aplatir / réduire les opérations et puis stocke les résultats dans une table séparée que nous utilisons pour la déclaration. Actuellement ce travail est exécuté manuellement en utilisant le spark-submit script. Je veux le programmer tous les soirs pour que les résultats soient pré-remplis pour le début de la journée. Dois-Je:

  1. mettre en place un cron job pour appeler le spark-submit script?
  2. ajouter l'horaire dans ma classe de travail, de sorte qu'il soit soumis une fois mais réalise les actions tous les soirs?
  3. y a-t-il un mécanisme intégré dans Spark ou un script séparé qui m'aidera à faire cela?

nous exécutons Spark en mode autonome.

toutes les suggestions appréciées!

22
demandé sur Matt 2015-05-21 16:44:25

6 réponses

il n'y a pas de mécanisme intégré dans Spark qui aidera. Une tâche cron semble raisonnable pour votre cas. Si vous vous trouvez à ajouter continuellement des dépendances à la tâche programmée, essayez Azkaban.

7
répondu Shayan Masood 2015-05-21 16:26:56

Vous pouvez utiliser un onglet cron, mais vraiment comme vous commencez à avoir des emplois spark qui dépendent d'autres emplois spark je recommande pinball pour la coordination. https://github.com/pinterest/pinball

pour qu'une simple crontab fonctionne, je créerais un script wrapper tel que

#!/bin/bash
cd /locm/spark_jobs

export SPARK_HOME=/usr/hdp/2.2.0.0-2041/spark
export HADOOP_CONF_DIR=/etc/hadoop/conf
export HADOOP_USER_NAME=hdfs
export HADOOP_GROUP=hdfs

#export SPARK_CLASSPATH=$SPARK_CLASSPATH:/locm/spark_jobs/configs/*

CLASS=
MASTER=
ARGS=
CLASS_ARGS=
echo "Running $CLASS With Master: $MASTER With Args: $ARGS And Class Args: $CLASS_ARGS"

$SPARK_HOME/bin/spark-submit --class $CLASS --master $MASTER --num-executors 4 --executor-cores 4 $ARGS spark-jobs-assembly*.jar $CLASS_ARGS >> /locm/spark_jobs/logs/$CLASS.log 2>&1

puis créer une crontab par

  1. crontab-e
  2. insérer 30 1 * * * /PATH/TO/SCRIPT.sh $CLASS "yarn-client"
11
répondu ben jarman 2015-05-22 19:04:53

Crontab est assez bon seulement si vous ne vous souciez pas de la haute disponibilité, car il fonctionnera sur une seule machine qui peut échouer.

le fait que vous fonctionniez en mode autonome indique que vous n'avez pas installé hadoop et mesos, qui ont quelques outils pour rendre cette tâche plus fiable.

http://airflow.incubator.apache.org/scheduler.html.

les utilisateurs de Mesos peuvent essayer d'utiliser chronos qui est un travail cron pour les clusters:https://github.com/mesos/chronos.

Il y a aussi oozie qui vient du monde hadoop http://blog.cloudera.com/blog/2013/01/how-to-schedule-recurring-hadoop-jobs-with-apache-oozie/.

Si c'est une mission critique, vous pouvez même programmer vous-même si vous utilisez consul / zookeper ou d'autres outils qui fournissent l'élection du chef - il suffit de faire fonctionner vos processus sur plusieurs machines, les faire concourir sur le leadership et s'assurer que le chef soumet le travail à l'étincelle.

vous pouvez utiliser spark job server pour rendre la soumission des travaux plus élégante:https://github.com/spark-jobserver/spark-jobserver

3
répondu Ofer Eliassaf 2016-08-15 20:02:12

l'ordonnanceur le plus standard qui accompagne toutes les distributions D'Apache Hadoop est Oozie.

https://oozie.apache.org/docs/4.2.0/DG_SparkActionExtension.html

d'après mon expérience au départ, il est peu difficile de travailler avec le XML une fois qu'on s'y est habitué, il fonctionne comme un charme.

3
répondu Krishna Kalyan 2016-08-15 20:27:55

Vous pouvez utiliser Rundeck pour programmer des emplois avec des écrans D'assurance-chômage décents pour gérer les échecs d'emploi et la notification.

1
répondu akshat thakar 2016-10-29 02:40:59

vous pouvez utiliser Oozie pour planifier vos travaux d'étincelles. Il fait partie de l'Écosystème Hadoop.

0
répondu Akshat Chaturvedi 2018-08-03 04:20:15