Spuštění Apache Oozie v clusterech Azure HDInsight s balíčkem zabezpečení podniku

Apache Oozie je systém pro pracovní postupy a koordinaci, který spravuje úlohy Apache Hadoop. Oozie je integrovaná se zásobníkem Hadoop a podporuje následující úlohy:

  • Apache MapReduce
  • Apache Pig
  • Apache Hive
  • Apache Sqoop

Oozie můžete použít také k plánování úloh, které jsou specifické pro systém, jako jsou programy Java nebo skripty prostředí.

Požadavek

Cluster Azure HDInsight Hadoop s balíčkem zabezpečení podniku (ESP). Viz Konfigurace clusterů HDInsight pomocí ESP.

Poznámka

Podrobné pokyny k používání Oozie v clusterech bez ESP najdete v tématu Použití pracovních postupů Apache Oozie ve službě Azure HDInsight se systémem Linux.

Připojení ke clusteru ESP

Další informace o Secure Shellu (SSH) najdete v tématu Připojení ke službě HDInsight (Hadoop) pomocí SSH.

  1. Připojte se ke clusteru HDInsight pomocí SSH:

    ssh [DomainUserName]@<clustername>-ssh.azurehdinsight.net
    
  2. K ověření úspěšného ověřování protokolem klist Kerberos použijte příkaz . Pokud ne, spusťte ověřování protokolem Kerberos pomocí příkazu kinit .

  3. Přihlaste se k bráně HDInsight a zaregistrujte token OAuth potřebný pro přístup k Azure Data Lake Storage:

    curl -I -u [DomainUserName@Domain.com]:[DomainUserPassword] https://<clustername>.azurehdinsight.net
    

    Kód odpovědi na stav 200 OK označuje úspěšnou registraci. Pokud obdržíte neoprávněnou odpověď, například 401, zkontrolujte uživatelské jméno a heslo.

Definování pracovního postupu

Definice pracovních postupů Oozie se zapisují v jazyce Apache Hadoop Process Definition Language (hPDL). hPDL je jazyk definice procesu XML. Pomocí následujících kroků definujte pracovní postup:

  1. Nastavení pracovního prostoru uživatele domény:

    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>/
    

    Nahraďte DomainUser uživatelským jménem domény. Nahraďte DomainUserPath cestou k domovskému adresáři pro uživatele domény. Nahraďte ClusterVersion verzí datové platformy clusteru.

  2. K vytvoření a úpravě nového souboru použijte následující příkaz:

    nano workflow.xml
    
  3. Po otevření editoru nano zadejte jako obsah souboru následující kód XML:

    <?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. Nahraďte clustername názvem clusteru.

  5. Pokud chcete soubor uložit, stiskněte Ctrl+X. Zadejte Y. Pak vyberte Enter.

    Pracovní postup je rozdělený na dvě části:

    • Pověření. Tato část přebírá přihlašovací údaje, které se používají k ověřování akcí Oozie:

      Tento příklad používá ověřování pro akce Hivu. Další informace najdete v tématu Ověřování akcí.

      Služba přihlašovacích údajů umožňuje akcím Oozie zosobnit uživatele pro přístup ke službám Hadoop.

    • Akce. Tato část obsahuje tři akce: map-reduce, Server Hive 2 a Server Hive 1:

      • Akce map-reduce spustí příklad z balíčku Oozie pro map-reduce, který vypíše agregovaný počet slov.

      • Akce Serveru Hive 2 a Serveru Hive 1 spustí dotaz na ukázkovou tabulku Hive dodanou se službou HDInsight.

      Akce Hivu používají přihlašovací údaje definované v části přihlašovacích údajů k ověřování pomocí klíčového slova cred v elementu action.

  6. Pomocí následujícího příkazu zkopírujte workflow.xml soubor do /user/<domainuser>/examples/apps/map-reduce/workflow.xmlsložky :

    hdfs dfs -put workflow.xml /user/<domainuser>/examples/apps/map-reduce/workflow.xml
    
  7. Nahraďte domainuser svým uživatelským jménem pro doménu.

Definování souboru vlastností pro úlohu Oozie

  1. Pomocí následujícího příkazu vytvořte a upravte nový soubor pro vlastnosti úlohy:

    nano job.properties
    
  2. Po otevření editoru nano použijte jako obsah souboru následující kód XML:

    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
    
    • adl://home Pokud jako primární úložiště clusteru nameNode používáte Azure Data Lake Storage Gen1, použijte pro vlastnost identifikátor URI. Pokud používáte Azure Blob Storage, změňte na wasb://home. Pokud používáte Azure Data Lake Storage Gen2, změňte na abfs://home.
    • Nahraďte domainuser svým uživatelským jménem pro doménu.
    • Nahraďte ClusterShortName krátkým názvem clusteru. Pokud je například název clusteru https:// [example link] sechadoopcontoso.azurehdisnight.net, clustershortname je prvních šest znaků clusteru: sechad.
    • Nahraďte jdbcurlvalue adresou URL JDBC z konfigurace Hivu. Příkladem je jdbc:hive2://headnodehost:10001/;transportMode=http.
    • Soubor uložíte tak, že vyberete Ctrl+X, zadáte Ya pak vyberete Enter.

    Tento soubor vlastností musí být místně k dispozici při spouštění úloh Oozie.

Vytváření vlastních skriptů Hive pro úlohy Oozie

Můžete vytvořit dva skripty Hive pro server Hive 1 a Server Hive 2, jak je znázorněno v následujících částech.

Soubor serveru Hive 1

  1. Vytvoření a úprava souboru pro akce serveru Hive 1:

    nano countrowshive1.hql
    
  2. Vytvořte skript:

    INSERT OVERWRITE DIRECTORY '${hiveOutputDirectory1}'
    ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
    select devicemake from hivesampletable limit 2;
    
  3. Uložte soubor do systému souborů APACHE Hadoop Distributed File System (HDFS):

    hdfs dfs -put countrowshive1.hql countrowshive1.hql
    

Soubor serveru Hive 2

  1. Vytvoření a úprava pole pro akce serveru Hive 2:

    nano countrowshive2.hql
    
  2. Vytvořte skript:

    INSERT OVERWRITE DIRECTORY '${hiveOutputDirectory1}' 
    ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' 
    select devicemodel from hivesampletable limit 2;
    
  3. Uložte soubor do HDFS:

    hdfs dfs -put countrowshive2.hql countrowshive2.hql
    

Odeslání úloh Oozie

Odesílání úloh Oozie pro clustery ESP se podobá odesílání úloh Oozie v clusterech bez ESP.

Další informace najdete v tématu Použití Apache Oozie s Apache Hadoopem k definování a spuštění pracovního postupu v Azure HDInsight se systémem Linux.

Výsledky odeslání úlohy Oozie

Úlohy Oozie se spouští pro uživatele. Protokoly auditu Apache Hadoop YARN i Apache Ranger proto zobrazují úlohy spouštěné jako zosobněný uživatel. Výstup rozhraní příkazového řádku úlohy Oozie vypadá jako následující kód:

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

Protokoly auditu Ranger pro akce serveru Hive 2 zobrazují, že Oozie provádí akci pro uživatele. Zobrazení Ranger a YARN vidí jenom správce clusteru.

Konfigurace autorizace uživatelů v Oozie

Oozie sama o sobě má konfiguraci autorizace uživatelů, která může uživatelům blokovat zastavování nebo odstraňování úloh jiných uživatelů. Pokud chcete tuto konfiguraci povolit, nastavte na oozie.service.AuthorizationService.security.enabledtrue.

Další informace najdete v tématu Instalace a konfigurace Apache Oozie.

Pro komponenty, jako je Hive server 1, kde není modul plug-in Ranger dostupný nebo podporovaný, je možná pouze hrubá autorizace HDFS. Jemně odstupňovaná autorizace je k dispozici pouze prostřednictvím modulů plug-in Ranger.

Získání webového uživatelského rozhraní Oozie

Webové uživatelské rozhraní Oozie poskytuje webové zobrazení stavu úloh Oozie v clusteru. Pokud chcete získat webové uživatelské rozhraní, proveďte následující kroky v clusterech ESP:

  1. Přidejte hraniční uzel a povolte ověřování protokolem Kerberos SSH.

  2. Postupujte podle kroků webového uživatelského rozhraní Oozie a povolte tunelování SSH k hraničnímu uzlu a přístup k webovému uživatelskému rozhraní.

Další kroky