Apache Oozie uitvoeren in Azure HDInsight-clusters met Enterprise Security Package
Apache Oozie is een werkstroom- en coördinatiesysteem waarmee Apache Hadoop-taken worden beheerd. Oozie is geïntegreerd met de Hadoop-stack en ondersteunt de volgende taken:
- Apache MapReduce
- Apache Pig
- Apache Hive
- Apache Sqoop
U kunt Oozie ook gebruiken om taken te plannen die specifiek zijn voor een systeem, zoals Java-programma's of shellscripts.
Vereiste
Een Azure HDInsight Hadoop-cluster met Enterprise Security Package (ESP). Zie HDInsight-clusters configureren met ESP.
Verbinding maken met een ESP-cluster
Zie Verbinding maken met HDInsight (Hadoop) met behulp van SSH voor meer informatie over Secure Shell (SSH).
Maak verbinding met het HDInsight-cluster met behulp van SSH:
ssh [DomainUserName]@<clustername>-ssh.azurehdinsight.net
Gebruik de opdracht om te
klist
controleren of kerberos-verificatie is geslaagd. Zo niet, gebruikkinit
dan om Kerberos-verificatie te starten.Meld u aan bij de HDInsight-gateway om het OAuth-token te registreren dat is vereist voor toegang tot Azure Data Lake Storage:
curl -I -u [DomainUserName@Domain.com]:[DomainUserPassword] https://<clustername>.azurehdinsight.net
Een statusreactiecode van 200 OK geeft aan dat de registratie is geslaagd. Controleer de gebruikersnaam en het wachtwoord als er een niet-geautoriseerd antwoord wordt ontvangen, zoals 401.
De werkstroom definiëren
Oozie-werkstroomdefinities worden geschreven in Apache Hadoop Process Definition Language (hPDL). hPDL is een xml-procesdefinitietaal. Voer de volgende stappen uit om de werkstroom te definiëren:
De werkruimte van een domeingebruiker instellen:
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>/
Vervang door
DomainUser
de domeinnaam. Vervang doorDomainUserPath
het pad naar de basismap voor de domeingebruiker. Vervang doorClusterVersion
de versie van uw clustergegevensplatform.Gebruik de volgende instructie om een nieuw bestand te maken en te bewerken:
nano workflow.xml
Nadat de nano-editor is geopend, voert u de volgende XML in als bestandsinhoud:
<?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>
Vervang
clustername
door de naam van het cluster.Selecteer Ctrl+X om het bestand op te slaan. Voer Y in. Selecteer vervolgens Enter.
De werkstroom bestaat uit twee delen:
Referentie. In deze sectie worden de referenties gebruikt voor het verifiëren van Oozie-acties:
In dit voorbeeld wordt verificatie gebruikt voor Hive-acties. Zie Actieverificatie voor meer informatie.
Met de referentieservice kunnen Oozie-acties de gebruiker imiteren voor toegang tot Hadoop-services.
Actie. Deze sectie bevat drie acties: map-reduce, Hive-server 2 en Hive-server 1:
Met de actie map-reduce wordt een voorbeeld uitgevoerd uit een Oozie-pakket voor toewijzingsverperken dat het geaggregeerde aantal woorden uitvoert.
Met de acties Hive-server 2 en Hive-server 1 wordt een query uitgevoerd op een hive-voorbeeldtabel die bij HDInsight wordt geleverd.
De Hive-acties gebruiken de referenties die zijn gedefinieerd in de sectie referenties voor verificatie met behulp van het trefwoord
cred
in het actie-element.
Gebruik de volgende opdracht om het
workflow.xml
bestand te kopiëren naar/user/<domainuser>/examples/apps/map-reduce/workflow.xml
:hdfs dfs -put workflow.xml /user/<domainuser>/examples/apps/map-reduce/workflow.xml
Vervang door
domainuser
uw gebruikersnaam voor het domein.
Het eigenschappenbestand voor de Oozie-taak definiëren
Gebruik de volgende instructie om een nieuw bestand voor taakeigenschappen te maken en te bewerken:
nano job.properties
Nadat de nano-editor is geopend, gebruikt u de volgende XML als inhoud van het bestand:
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
- Gebruik de
adl://home
URI voor denameNode
eigenschap als u Azure Data Lake Storage Gen1 als primaire clusteropslag hebt. Als u Azure Blob Storage gebruikt, wijzigt u inwasb://home
. Als u Azure Data Lake Storage Gen2 gebruikt, wijzigt u inabfs://home
. - Vervang door
domainuser
uw gebruikersnaam voor het domein. - Vervang door
ClusterShortName
de korte naam voor het cluster. Als de clusternaam bijvoorbeeld is https:// [voorbeeldkoppeling] sechadoopcontoso.azurehdisnight.net, is declustershortname
de eerste zes tekens van het cluster: sechad. - Vervang door
jdbcurlvalue
de JDBC-URL uit de Hive-configuratie. Een voorbeeld is jdbc:hive2://headnodehost:10001/;transportMode=http. - Als u het bestand wilt opslaan, selecteert u Ctrl+X, voert u in
Y
en selecteert u vervolgens Enter.
Dit eigenschappenbestand moet lokaal aanwezig zijn bij het uitvoeren van Oozie-taken.
- Gebruik de
Aangepaste Hive-scripts maken voor Oozie-taken
U kunt de twee Hive-scripts maken voor Hive-server 1 en Hive-server 2, zoals wordt weergegeven in de volgende secties.
Hive-server 1-bestand
Een bestand maken en bewerken voor Hive-server 1-acties:
nano countrowshive1.hql
Maak het script:
INSERT OVERWRITE DIRECTORY '${hiveOutputDirectory1}' ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' select devicemake from hivesampletable limit 2;
Sla het bestand op in HDFS (Apache Hadoop Distributed File System):
hdfs dfs -put countrowshive1.hql countrowshive1.hql
Hive-server 2-bestand
Een veld maken en bewerken voor hive-server 2-acties:
nano countrowshive2.hql
Maak het script:
INSERT OVERWRITE DIRECTORY '${hiveOutputDirectory1}' ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' select devicemodel from hivesampletable limit 2;
Sla het bestand op in HDFS:
hdfs dfs -put countrowshive2.hql countrowshive2.hql
Oozie-taken verzenden
Het indienen van Oozie-taken voor ESP-clusters is hetzelfde als het indienen van Oozie-taken in niet-ESP-clusters.
Zie Apache Oozie gebruiken met Apache Hadoop om een werkstroom te definiëren en uit te voeren in Azure HDInsight op basis van Linux voor meer informatie.
Resultaten van het indienen van een Oozie-taak
Oozie-taken worden uitgevoerd voor de gebruiker. Zowel apache Hadoop YARN- als Apache Ranger-auditlogboeken tonen dus aan dat de taken worden uitgevoerd als de geïmiteerde gebruiker. De uitvoer van de opdrachtregelinterface van een Oozie-taak ziet eruit als de volgende code:
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 -
-----------------------------------------------------------------------------------------------
In de Ranger-auditlogboeken voor hive server 2-acties wordt weergegeven dat Oozie de actie voor de gebruiker uitvoert. De Ranger- en YARN-weergaven zijn alleen zichtbaar voor de clusterbeheerder.
Gebruikersautorisatie configureren in Oozie
Oozie heeft zelf een configuratie voor gebruikersautorisatie die kan voorkomen dat gebruikers taken van andere gebruikers stoppen of verwijderen. Als u deze configuratie wilt inschakelen, stelt u de oozie.service.AuthorizationService.security.enabled
in op true
.
Zie Installatie en configuratie van Apache Oozie voor meer informatie.
Voor onderdelen zoals Hive-server 1 waarvoor de Ranger-invoegtoepassing niet beschikbaar is of wordt ondersteund, is alleen grofkorrelige HDFS-autorisatie mogelijk. Fijnmazige autorisatie is alleen beschikbaar via Ranger-invoegtoepassingen.
De Oozie-webinterface ophalen
De Oozie-webgebruikersinterface biedt een webweergave van de status van Oozie-taken in het cluster. Voer de volgende stappen uit in ESP-clusters om de webgebruikersinterface op te halen:
Voeg een edge-knooppunt toe en schakel SSH Kerberos-verificatie in.
Volg de stappen van de Oozie-webinterface om SSH-tunneling naar het edge-knooppunt in te schakelen en toegang te krijgen tot de webgebruikersinterface.