Köra Apache Oozie i Azure HDInsight-kluster med Enterprise Security Package
Apache Oozie är ett arbetsflödes- och samordningssystem som hanterar Apache Hadoop-jobb. Oozie är integrerat med Hadoop-stacken och stöder följande jobb:
- Apache MapReduce
- Apache Pig
- Apache Hive
- Apache Sqoop
Du kan också använda Oozie för att schemalägga jobb som är specifika för ett system, till exempel Java-program eller shell-skript.
Förutsättning
Ett Azure HDInsight Hadoop-kluster med Enterprise Security Package (ESP). Se Konfigurera HDInsight-kluster med ESP.
Anteckning
Detaljerade anvisningar om hur du använder Oozie i icke-ESP-kluster finns i Använda Apache Oozie-arbetsflöden i Linux-baserade Azure HDInsight.
Ansluta till ett ESP-kluster
Mer information om Secure Shell (SSH) finns i Ansluta till HDInsight (Hadoop) med SSH.
Anslut till HDInsight-klustret med hjälp av SSH:
ssh [DomainUserName]@<clustername>-ssh.azurehdinsight.net
Använd kommandot för
klist
att verifiera lyckad Kerberos-autentisering. Annars använder dukinit
för att starta Kerberos-autentisering.Logga in på HDInsight-gatewayen för att registrera den OAuth-token som krävs för att få åtkomst till Azure Data Lake Storage:
curl -I -u [DomainUserName@Domain.com]:[DomainUserPassword] https://<clustername>.azurehdinsight.net
Statussvarskoden 200 OK anger att registreringen lyckades. Kontrollera användarnamnet och lösenordet om ett obehörigt svar tas emot, till exempel 401.
Definiera arbetsflödet
Oozie-arbetsflödesdefinitioner skrivs i Apache Hadoop Process Definition Language (hPDL). hPDL är ett XML-processdefinitionsspråk. Utför följande steg för att definiera arbetsflödet:
Konfigurera en domänanvändares arbetsyta:
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>/
Ersätt
DomainUser
med domännamnet. ErsättDomainUserPath
med sökvägen till hemkatalogen för domänanvändaren. ErsättClusterVersion
med din version av klusterdataplattformen.Använd följande instruktion för att skapa och redigera en ny fil:
nano workflow.xml
När nanoredigeraren har öppnats anger du följande XML som filinnehåll:
<?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>
Ersätt
clustername
med namnet på klustret.Spara filen genom att välja Ctrl+X. Ange Y. Välj sedan Retur.
Arbetsflödet är indelat i två delar:
Referens. Det här avsnittet innehåller de autentiseringsuppgifter som används för att autentisera Oozie-åtgärder:
I det här exemplet används autentisering för Hive-åtgärder. Mer information finns i Åtgärdsautentisering.
Autentiseringstjänsten gör att Oozie-åtgärder kan personifiera användaren för åtkomst till Hadoop-tjänster.
Åtgärder. Det här avsnittet innehåller tre åtgärder: map-reduce, Hive server 2 och Hive server 1:
Åtgärden map-reduce kör ett exempel från ett Oozie-paket för map-reduce som matar ut det aggregerade ordantalet.
Åtgärderna Hive server 2 och Hive server 1 kör en fråga på en Hive-exempeltabell som medföljer HDInsight.
Hive-åtgärderna använder de autentiseringsuppgifter som definierats i avsnittet autentiseringsuppgifter för autentisering med hjälp av nyckelordet
cred
i åtgärdselementet.
Använd följande kommando för att kopiera
workflow.xml
filen till/user/<domainuser>/examples/apps/map-reduce/workflow.xml
:hdfs dfs -put workflow.xml /user/<domainuser>/examples/apps/map-reduce/workflow.xml
Ersätt
domainuser
med ditt användarnamn för domänen.
Definiera egenskapsfilen för Oozie-jobbet
Använd följande instruktion för att skapa och redigera en ny fil för jobbegenskaper:
nano job.properties
När nanoredigeraren har öppnats använder du följande XML som innehållet i filen:
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
- Använd URI:n
adl://home
förnameNode
egenskapen om du har Azure Data Lake Storage Gen1 som primär klusterlagring. Om du använder Azure Blob Storage ändrar du tillwasb://home
. Om du använder Azure Data Lake Storage Gen2 ändrar du tillabfs://home
. - Ersätt
domainuser
med ditt användarnamn för domänen. - Ersätt
ClusterShortName
med det korta namnet för klustret. Om klusternamnet till exempel är https:// [exempellänk] sechadoopcontoso.azurehdisnight.net ärclustershortname
klustrets första sex tecken: sechad. - Ersätt
jdbcurlvalue
med JDBC-URL:en från Hive-konfigurationen. Ett exempel är jdbc:hive2://headnodehost:10001/;transportMode=http. - Om du vill spara filen väljer du Ctrl+X, anger
Y
och väljer sedan Retur.
Den här egenskapsfilen måste finnas lokalt när du kör Oozie-jobb.
- Använd URI:n
Skapa anpassade Hive-skript för Oozie-jobb
Du kan skapa de två Hive-skripten för Hive Server 1 och Hive Server 2 enligt följande avsnitt.
Hive server 1-fil
Skapa och redigera en fil för Hive Server 1-åtgärder:
nano countrowshive1.hql
Skapa skriptet:
INSERT OVERWRITE DIRECTORY '${hiveOutputDirectory1}' ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' select devicemake from hivesampletable limit 2;
Spara filen i Apache Hadoop Distributed File System (HDFS):
hdfs dfs -put countrowshive1.hql countrowshive1.hql
Hive server 2-fil
Skapa och redigera ett fält för Hive Server 2-åtgärder:
nano countrowshive2.hql
Skapa skriptet:
INSERT OVERWRITE DIRECTORY '${hiveOutputDirectory1}' ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' select devicemodel from hivesampletable limit 2;
Spara filen i HDFS:
hdfs dfs -put countrowshive2.hql countrowshive2.hql
Skicka Oozie-jobb
Att skicka Oozie-jobb för ESP-kluster är som att skicka Oozie-jobb i icke-ESP-kluster.
Mer information finns i Använda Apache Oozie med Apache Hadoop för att definiera och köra ett arbetsflöde i Linux-baserade Azure HDInsight.
Resultat från ett Oozie-jobb som skickas
Oozie-jobb körs för användaren. Därför visar både Apache Hadoop YARN- och Apache Ranger-granskningsloggarna de jobb som körs som den personifierade användaren. Kommandoradsgränssnittets utdata för ett Oozie-jobb ser ut som följande kod:
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 -
-----------------------------------------------------------------------------------------------
Ranger-granskningsloggarna för Hive Server 2-åtgärderna visar hur Oozie kör åtgärden för användaren. Vyerna Ranger och YARN är endast synliga för klusteradministratören.
Konfigurera användarauktorisering i Oozie
Oozie har en konfiguration för användarauktorisering som kan blockera användare från att stoppa eller ta bort andra användares jobb. Om du vill aktivera den här konfigurationen oozie.service.AuthorizationService.security.enabled
anger du till true
.
Mer information finns i Installation och konfiguration av Apache Oozie.
För komponenter som Hive server 1 där Ranger-plugin-programmet inte är tillgängligt eller stöds är endast grovkornig HDFS-auktorisering möjlig. Detaljerad auktorisering är endast tillgängligt via Ranger-plugin-program.
Hämta Oozie-webbgränssnittet
Oozie-webbgränssnittet ger en webbaserad vy över statusen för Oozie-jobb i klustret. Hämta webbgränssnittet genom att utföra följande steg i ESP-kluster:
Lägg till en kantnod och aktivera SSH Kerberos-autentisering.
Följ stegen i Oozie-webbgränssnittet för att aktivera SSH-tunnlar till gränsnoden och få åtkomst till webbgränssnittet.