Share via


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.

  1. Anslut till HDInsight-klustret med hjälp av SSH:

    ssh [DomainUserName]@<clustername>-ssh.azurehdinsight.net
    
  2. Använd kommandot för klist att verifiera lyckad Kerberos-autentisering. Annars använder du kinit för att starta Kerberos-autentisering.

  3. 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:

  1. 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ätt DomainUserPath med sökvägen till hemkatalogen för domänanvändaren. Ersätt ClusterVersion med din version av klusterdataplattformen.

  2. Använd följande instruktion för att skapa och redigera en ny fil:

    nano workflow.xml
    
  3. 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>
    
  4. Ersätt clustername med namnet på klustret.

  5. 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.

  6. 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
    
  7. Ersätt domainuser med ditt användarnamn för domänen.

Definiera egenskapsfilen för Oozie-jobbet

  1. Använd följande instruktion för att skapa och redigera en ny fil för jobbegenskaper:

    nano job.properties
    
  2. 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ör nameNode egenskapen om du har Azure Data Lake Storage Gen1 som primär klusterlagring. Om du använder Azure Blob Storage ändrar du till wasb://home. Om du använder Azure Data Lake Storage Gen2 ändrar du till abfs://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 är clustershortname 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 Yoch väljer sedan Retur.

    Den här egenskapsfilen måste finnas lokalt när du kör Oozie-jobb.

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

  1. Skapa och redigera en fil för Hive Server 1-åtgärder:

    nano countrowshive1.hql
    
  2. Skapa skriptet:

    INSERT OVERWRITE DIRECTORY '${hiveOutputDirectory1}'
    ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
    select devicemake from hivesampletable limit 2;
    
  3. Spara filen i Apache Hadoop Distributed File System (HDFS):

    hdfs dfs -put countrowshive1.hql countrowshive1.hql
    

Hive server 2-fil

  1. Skapa och redigera ett fält för Hive Server 2-åtgärder:

    nano countrowshive2.hql
    
  2. Skapa skriptet:

    INSERT OVERWRITE DIRECTORY '${hiveOutputDirectory1}' 
    ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' 
    select devicemodel from hivesampletable limit 2;
    
  3. 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:

  1. Lägg till en kantnod och aktivera SSH Kerberos-autentisering.

  2. Följ stegen i Oozie-webbgränssnittet för att aktivera SSH-tunnlar till gränsnoden och få åtkomst till webbgränssnittet.

Nästa steg