Tutoriel Apache Oozie : Qu'est-ce que c'est, workflow, exemple – Hadoop
Qu’est-ce qu’OOZIE ?
Apache Oozie est un planificateur de workflow pour Hadoop. Il s'agit d'un système qui exécute le flux de travail des tâches dépendantes. Ici, les utilisateurs sont autorisés à créer Graphes acycliques dirigés de workflows, qui peuvent être exécutés en parallèle et séquentiellement dans Hadoop.
Il se compose de deux parties :
-
Moteur de workflow : la responsabilité d'un moteur de workflow est de stocker et d'exécuter des workflows composés de tâches Hadoop, par exemple MapReduce, Pig, Hive.
- Moteur de coordinateur: Il exécute des tâches de flux de travail en fonction de calendriers prédéfinis et de la disponibilité des données.
Oozie est évolutif et peut gérer l'exécution en temps opportun de milliers de flux de travail (chacun composé de dizaines de tâches) dans un cluster Hadoop.
Oozie est également très flexible. On peut facilement démarrer, arrêter, suspendre et réexécuter des tâches. Oozie facilite la réexécution des flux de travail ayant échoué. On peut facilement comprendre à quel point il peut être difficile de rattraper les tâches manquées ou ayant échoué en raison d’un temps d’arrêt ou d’une panne. Il est même possible d'ignorer un nœud défaillant spécifique.
Comment fonctionne OOZIE ?
Oozie s'exécute en tant que service dans le cluster et les clients soumettent des définitions de flux de travail pour un traitement immédiat ou ultérieur.
Le flux de travail Oozie comprend nœuds d'action et nœuds de flux de contrôle.
An noeud d'action représente une tâche de flux de travail, par exemple déplacer des fichiers vers HDFS, exécuter un MapReduce, Pig ou Ruche tâches, importer des données à l'aide de Sqoop ou exécuter un script shell d'un programme écrit en Java.
A nœud de flux de contrôle contrôle l'exécution du flux de travail entre les actions en autorisant des constructions telles que la logique conditionnelle dans lesquelles différentes branches peuvent être suivies en fonction du résultat du nœud d'action précédent.
Noeud de démarrage, Nœud final et Nœud d'erreur relèvent de cette catégorie de nœuds.
Démarrer le nœud, désigne le début du travail de workflow.
Nœud final, signale la fin du travail.
Nœud d'erreur désigne l'apparition d'une erreur et le message d'erreur correspondant à imprimer.
A la fin de l'exécution d'un workflow, le rappel HTTP est utilisé par Oozie pour mettre à jour le client avec l'état du workflow. L’entrée ou la sortie d’un nœud d’action peut également déclencher le rappel.
Exemple de diagramme de flux de travail
Packaging et déploiement d'une application de workflow Oozie
Une application de workflow comprend la définition du workflow et toutes les ressources associées telles que les fichiers MapReduce Jar, les scripts Pig, etc. Les applications doivent suivre une structure de répertoires simple et sont déployées sur HDFS pour qu'Oozie puisse y accéder.
Un exemple de structure de répertoires est présenté ci-dessous.
<name of workflow>/</name> ??? lib/ ? ??? hadoop-examples.jar ??? workflow.xml
Il est nécessaire de conserver workflow.xml (un fichier de définition de workflow) dans le répertoire de niveau supérieur (répertoire parent avec le nom du workflow). Le répertoire Lib contient des fichiers Jar contenant des classes MapReduce. Une application de workflow conforme à cette disposition peut être construite avec n'importe quel outil de construction, par exemple Ant ou Maven.
Une telle version doit être copiée sur HDFS à l'aide d'une commande, par exemple :
% hadoop fs -put hadoop-examples/target/<name of workflow dir> name of workflow
Étapes pour exécuter une tâche de flux de travail Oozie
Dans cette section, nous verrons comment exécuter un travail de workflow. Pour exécuter cela, nous utiliserons l'outil de ligne de commande Oozie (un programme client qui communique avec le serveur Oozie).
1. Exportez la variable d'environnement OOZIE_URL qui indique à la commande oozie quel serveur Oozie utiliser (ici nous en utilisons un exécuté localement) :
% export OOZIE_URL="http://localhost:11000/oozie"
2. Exécutez le travail de flux de travail en utilisant-
% oozie job -config ch05/src/main/resources/max-temp-workflow.properties -run
L'option -config fait référence à un local Java Properties contenant les définitions des paramètres du fichier XML de workflow, ainsi que oozie.wf.application.path, qui indique à Oozie l'emplacement de l'application de workflow dans HDFS.
Exemple de contenu du fichier de propriétés :
nameNode=hdfs://localhost:8020 jobTracker=localhost:8021 oozie.wf.application.path=${nameNode}/user/${user.name}/<name of workflow>
3. Obtenez l'état du travail de flux de travail.
L'état du travail de flux de travail peut être vu à l'aide de la sous-commande « job » avec l'option « -info » et en spécifiant l'ID du travail après « -info ».
e.g., % oozie job -info <job id>
La sortie affiche l'état qui est RUNNING, KILLED ou SUCCEEDED.
4. Les résultats d'une exécution réussie du flux de travail peuvent être vus à l'aide de la commande Hadoop comme :
% hadoop fs -cat <location of result>
Pourquoi utiliser Oozie ?
L'objectif principal de l'utilisation d'Oozie est de gérer différents types de tâches traitées dans le système Hadoop.
Les dépendances entre les tâches sont spécifiées par un utilisateur sous la forme de graphiques acycliques dirigés. Oozie consomme ces informations et s'occupe de leur exécution dans le bon ordre comme spécifié dans un workflow. De cette façon, le temps nécessaire à l'utilisateur pour gérer l'ensemble du flux de travail est économisé. De plus, Oozie dispose d'une disposition permettant de préciser la fréquence d'exécution d'un travail particulier.
Caractéristiques d'Oozie
- Oozie dispose d'une API client et d'une interface de ligne de commande qui peuvent être utilisées pour lancer, contrôler et surveiller le travail à partir de Java .
- Grâce à ses API de service Web, vous pouvez contrôler les tâches de n'importe où.
- Oozie a la possibilité d'exécuter des tâches dont l'exécution est planifiée périodiquement.
- Oozie a la possibilité d'envoyer des notifications par e-mail une fois les travaux terminés.