Exécuter Apache Oozie dans des clusters Azure HDInsight avec le Pack Sécurité Entreprise
Apache Oozie est un workflow et un système de coordination qui gère les tâches Apache Hadoop. Oozie est intégré dans la pile Hadoop et prend en charge les travaux suivants :
- Apache MapReduce
- Apache Pig
- Apache Hive
- Apache Sqoop
Vous pouvez également utiliser Oozie pour planifier des travaux propres à un système, comme des programmes Java ou des scripts de l’interpréteur de commandes.
Configuration requise
Un cluster Azure HDInsight Hadoop avec le Pack Sécurité Entreprise (ESP). Voir Configurer des clusters HDInsight avec ESP.
Notes
Pour obtenir des instructions détaillées sur la façon d’utiliser Oozie dans des clusters non-ESP, consultez Utiliser des workflows Apache Oozie dans Azure HDInsight Linux.
Se connecter à un cluster ESP
Pour en savoir plus sur Secure Shell (SSH), consultez la page Se connecter à HDInsight (Hadoop) à l’aide de SSH.
Connectez-vous au cluster HDInsight à l’aide de SSH :
ssh [DomainUserName]@<clustername>-ssh.azurehdinsight.net
Pour vérifier si l’authentification Kerberos a réussi, utilisez la commande
klist
. Si ce n’est pas le cas, utilisezkinit
pour lancer l’authentification Kerberos.Connectez-vous à la passerelle HDInsight pour inscrire le jeton OAuth requis pour l’accès à Azure Data Lake Storage (ADLS) :
curl -I -u [DomainUserName@Domain.com]:[DomainUserPassword] https://<clustername>.azurehdinsight.net
Le code de réponse d’état200 OK indique la réussite de l’inscription. Si vous recevez une erreur 401 (inscription non autorisée), vérifiez le nom d’utilisateur et le mot de passe.
Définition du flux de travail
Les définitions des workflows Oozie sont écrites en hPDL (langage de définition de processus Apache Hadoop). hPDL est un langage de définition de processus XML. Pour définir le workflow, procédez comme suit :
Configurez l’espace de travail de l’utilisateur du domaine :
hdfs dfs -mkdir /user/<DomainUser> cd /home/<DomainUserPath> cp /usr/hdp/<ClusterVersion>/oozie/doc/oozie-examples.tar.gz . tar -xvf oozie-examples.tar.gz hdfs dfs -put examples /user/<DomainUser>/
Remplacez
DomainUser
par le nom de l’utilisateur de domaine. RemplacezDomainUserPath
par le chemin du répertoire de base de l’utilisateur de domaine. RemplacezClusterVersion
par votre version de plateforme de données de cluster.Pour créer et modifier un fichier, utilisez l’instruction suivante :
nano workflow.xml
Une fois que l’éditeur nano est ouvert, saisissez le code XML suivant comme contenu du fichier :
<?xml version="1.0" encoding="UTF-8"?> <workflow-app xmlns="uri:oozie:workflow:0.4" name="map-reduce-wf"> <credentials> <credential name="metastore_token" type="hcat"> <property> <name>hcat.metastore.uri</name> <value>thrift://<active-headnode-name>-<clustername>.<Domain>.com:9083</value> </property> <property> <name>hcat.metastore.principal</name> <value>hive/_HOST@<Domain>.COM</value> </property> </credential> <credential name="hs2-creds" type="hive2"> <property> <name>hive2.server.principal</name> <value>${jdbcPrincipal}</value> </property> <property> <name>hive2.jdbc.url</name> <value>${jdbcURL}</value> </property> </credential> </credentials> <start to="mr-test" /> <action name="mr-test"> <map-reduce> <job-tracker>${jobTracker}</job-tracker> <name-node>${nameNode}</name-node> <prepare> <delete path="${nameNode}/user/${wf:user()}/examples/output-data/mrresult" /> </prepare> <configuration> <property> <name>mapred.job.queue.name</name> <value>${queueName}</value> </property> <property> <name>mapred.mapper.class</name> <value>org.apache.oozie.example.SampleMapper</value> </property> <property> <name>mapred.reducer.class</name> <value>org.apache.oozie.example.SampleReducer</value> </property> <property> <name>mapred.map.tasks</name> <value>1</value> </property> <property> <name>mapred.input.dir</name> <value>/user/${wf:user()}/${examplesRoot}/input-data/text</value> </property> <property> <name>mapred.output.dir</name> <value>/user/${wf:user()}/${examplesRoot}/output-data/mrresult</value> </property> </configuration> </map-reduce> <ok to="myHive2" /> <error to="fail" /> </action> <action name="myHive2" cred="hs2-creds"> <hive2 xmlns="uri:oozie:hive2-action:0.2"> <job-tracker>${jobTracker}</job-tracker> <name-node>${nameNode}</name-node> <jdbc-url>${jdbcURL}</jdbc-url> <script>${hiveScript2}</script> <param>hiveOutputDirectory2=${hiveOutputDirectory2}</param> </hive2> <ok to="myHive" /> <error to="fail" /> </action> <action name="myHive" cred="metastore_token"> <hive xmlns="uri:oozie:hive-action:0.2"> <job-tracker>${jobTracker}</job-tracker> <name-node>${nameNode}</name-node> <configuration> <property> <name>mapred.job.queue.name</name> <value>${queueName}</value> </property> </configuration> <script>${hiveScript1}</script> <param>hiveOutputDirectory1=${hiveOutputDirectory1}</param> </hive> <ok to="end" /> <error to="fail" /> </action> <kill name="fail"> <message>Oozie job failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message> </kill> <end name="end" /> </workflow-app>
Remplacez
clustername
par le nom du cluster.Pour enregistrer le fichier, appuyez sur Ctrl+X. Entrez Y. Ensuite, appuyez sur Entrée.
Le workflow comprend deux parties :
Informations d'identification. Cette section comprend les informations d’identification utilisées pour l’authentification des actions Oozie :
Cet exemple utilise l’authentification des actions Hive. Pour en savoir plus, voir l’authentification des actions.
Le service d’informations d’identification permet aux actions Oozie d’emprunter l’identité de l’utilisateur pour accéder aux services Hadoop.
Action. Cette section comporte trois actions : map-reduce, Hive server 2 et Hive server 1 :
L’action map-reduce exécute un exemple de package Oozie pour map-reduce qui génère le nombre de mots agrégés.
Les actions Hive server 2 et Hive server 1 exécutent une requête sur l’échantillon de table Hive fourni avec HDInsight.
Les actions Hive utilisent les informations d’identification définies dans la section Informations d’identification en vue d’une authentification à l’aide du mot clé
cred
dans l’élément d’action.
Utilisez la commande suivante pour copier le fichier
workflow.xml
vers/user/<domainuser>/examples/apps/map-reduce/workflow.xml
:hdfs dfs -put workflow.xml /user/<domainuser>/examples/apps/map-reduce/workflow.xml
Remplacez
domainuser
par le nom d’utilisateur de votre domaine.
Définir le fichier de propriétés de la tâche Oozie
Pour créer et modifier un fichier de propriétés de tâche, utilisez l’instruction suivante :
nano job.properties
Une fois que l’éditeur nano est ouvert, utilisez le code XML suivant comme contenu du fichier :
nameNode=adl://home jobTracker=headnodehost:8050 queueName=default examplesRoot=examples oozie.wf.application.path=${nameNode}/user/[domainuser]/examples/apps/map-reduce/workflow.xml hiveScript1=${nameNode}/user/${user.name}/countrowshive1.hql hiveScript2=${nameNode}/user/${user.name}/countrowshive2.hql oozie.use.system.libpath=true user.name=[domainuser] jdbcPrincipal=hive/<active-headnode-name>.<Domain>.com@<Domain>.COM jdbcURL=[jdbcurlvalue] hiveOutputDirectory1=${nameNode}/user/${user.name}/hiveresult1 hiveOutputDirectory2=${nameNode}/user/${user.name}/hiveresult2
- Utilisez l'URI
adl://home
de la propriéténameNode
si vous disposez d'Azure Data Lake Storage Gen1 comme espace de stockage en cluster principal. Si vous utilisez le service Stockage Blob Azure, remplacez cette valeur parwasb://home
. Si vous utilisez Azure Data Lake Storage Gen2, remplacez cette valeur parabfs://home
. - Remplacez
domainuser
par le nom d’utilisateur de votre domaine. - Remplacez
ClusterShortName
par le nom court du cluster. Par exemple, si le nom du cluster est https:// [exemple de lien] sechadoopcontoso.azurehdisnight.net, leclustershortname
est les six premiers caractères du cluster : sechad. - Remplacez
jdbcurlvalue
par l’URL JDBC de la configuration Hive. Par exemple, jdbc:hive2://headnodehost:10001/;transportMode=http. - Pour enregistrer le fichier, sélectionnez Ctrl + X, entrez
Y
, puis sélectionnez Entrée.
Ce fichier de propriétés doit être présent localement lors de l’exécution des tâches Oozie.
- Utilisez l'URI
Créer des scripts Hive personnalisés pour les tâches Oozie
Vous pouvez créer les deux scripts Hive pour les actions Hive server 2 et Hive server 1 comme indiqué dans les sections suivantes.
Fichier Hive server 1
Créez et modifiez un fichier pour les actions Hive server 1 :
nano countrowshive1.hql
Créez le script :
INSERT OVERWRITE DIRECTORY '${hiveOutputDirectory1}' ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' select devicemake from hivesampletable limit 2;
Enregistrez le fichier dans le système de fichiers DFS Apache Hadoop (HDFS) :
hdfs dfs -put countrowshive1.hql countrowshive1.hql
Fichier Hive Server 2
Créez et modifiez un fichier pour les actions Hive server 2 :
nano countrowshive2.hql
Créez le script :
INSERT OVERWRITE DIRECTORY '${hiveOutputDirectory1}' ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' select devicemodel from hivesampletable limit 2;
Enregistrez le fichier dans HDFS :
hdfs dfs -put countrowshive2.hql countrowshive2.hql
Soumettre des tâches Oozie
La soumission de tâches Oozie pour les clusters ESP fonctionne de la même façon que la soumission de tâches Oozie pour les clusters non-ESP.
Pour plus d’informations, consultez Utiliser Apache Oozie avec Apache Hadoop pour définir et exécuter un workflow Azure HDInsight basé sur Linux.
Résultats de la soumission d’une tâche Oozie
Les tâches Oozie sont exécutées pour l’utilisateur. Par conséquent, les journaux d’audit Apache Hadoop YARN et Apache Ranger affichent les travaux en cours d’exécution comme l’utilisateur impersonné. La sortie de l’interface de ligne de commande d’une tâche Oozie se présente comme le code suivant :
Job ID : 0000015-180626011240801-oozie-oozi-W
------------------------------------------------------------------------------------------------
Workflow Name : map-reduce-wf
App Path : adl://home/user/alicetest/examples/apps/map-reduce/wf.xml
Status : SUCCEEDED
Run : 0
User : alicetest
Group : -
Created : 2018-06-26 19:25 GMT
Started : 2018-06-26 19:25 GMT
Last Modified : 2018-06-26 19:30 GMT
Ended : 2018-06-26 19:30 GMT
CoordAction ID: -
Actions
------------------------------------------------------------------------------------------------
ID Status Ext ID ExtStatus ErrCode
------------------------------------------------------------------------------------------------
0000015-180626011240801-oozie-oozi-W@:start: OK - OK -
------------------------------------------------------------------------------------------------
0000015-180626011240801-oozie-oozi-W@mr-test OK job_1529975666160_0051 SUCCEEDED -
------------------------------------------------------------------------------------------------
0000015-180626011240801-oozie-oozi-W@myHive2 OK job_1529975666160_0053 SUCCEEDED -
------------------------------------------------------------------------------------------------
0000015-180626011240801-oozie-oozi-W@myHive OK job_1529975666160_0055 SUCCEEDED -
------------------------------------------------------------------------------------------------
0000015-180626011240801-oozie-oozi-W@end OK - OK -
-----------------------------------------------------------------------------------------------
Les journaux d’audit Ranger pour les actions Hive server 2 montrent l’exécution d’une action par Oozie à la place de l’utilisateur. Seul l’administrateur du cluster peut voir les vues Ranger et YARN.
Configurer l’autorisation utilisateur dans Oozie
Oozie permet de configurer l’autorisation utilisateur de manière à empêcher l’arrêt ou la suppression des tâches des autres utilisateurs. Pour activer cette configuration, définissez oozie.service.AuthorizationService.security.enabled
sur true
.
Pour plus d’informations, consultez Oozie Installation and Configuration.
Pour les composants tels que Hive server 1, où le plug-in Ranger n’est pas disponible ou pris en charge, seule l’autorisation HDFS de granularité grossière est possible. L’autorisation de granularité fine est uniquement disponible via les plug-ins Ranger.
Obtenir l’interface utilisateur web Oozie
L’interface utilisateur web Oozie fournit une vue web de l’état des travaux Oozie sur le cluster. Pour obtenir l’interface utilisateur web, effectuez les étapes suivantes dans les clusters ESP :
Ajoutez un nœud de périphérie et activez l’authentification Kerberos SSH.
Suivre les étapes de l’interface utilisateur web Oozie pour activer le tunneling SSH vers le nœud de périphérie et accéder à l’interface utilisateur web