Megosztás a következőn keresztül:


Apache Oozie futtatása Az Enterprise Security Package csomaggal rendelkező Azure HDInsight-fürtökön

Az Apache Oozie egy munkafolyamat és koordinációs rendszer, amely apache Hadoop-feladatokat kezel. Az Oozie integrálva van a Hadoop-verembe, és a következő feladatokat támogatja:

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

Az Oozie használatával olyan feladatokat is ütemezhet, amelyek egy adott rendszerre vonatkoznak, például Java-programokra vagy rendszerhéjszkriptekre.

Előfeltétel

Egy Azure HDInsight Hadoop-fürt Enterprise Security Package (ESP) csomaggal. Lásd: HDInsight-fürtök konfigurálása ESP-vel.

Megjegyzés

Az Oozie nem ESP-fürtökön való használatával kapcsolatos részletes utasításokért lásd: Apache Oozie-munkafolyamatok használata Linux-alapú Azure HDInsightban.

Csatlakozás ESP-fürthöz

További információ a Secure Shellről (SSH), lásd: Csatlakozás a HDInsighthoz (Hadoop) SSH használatával.

  1. Csatlakozzon a HDInsight-fürthöz SSH használatával:

    ssh [DomainUserName]@<clustername>-ssh.azurehdinsight.net
    
  2. A sikeres Kerberos-hitelesítés ellenőrzéséhez használja a klist parancsot. Ha nem, a használatával kinit indítsa el a Kerberos-hitelesítést.

  3. Jelentkezzen be a HDInsight-átjáróba a Azure Data Lake Storage eléréséhez szükséges OAuth-jogkivonat regisztrálásához:

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

    A sikeres regisztrációt a 200 OK állapotválaszkód jelzi. Ellenőrizze a felhasználónevet és a jelszót, ha jogosulatlan válasz érkezik, például 401.

A munkafolyamat definiálása

Az Oozie-munkafolyamat-definíciók az Apache Hadoop folyamatdefiníciós nyelven (hPDL) vannak megírva. A hPDL egy XML-folyamatdefiníciós nyelv. A munkafolyamat meghatározásához hajtsa végre a következő lépéseket:

  1. Tartományi felhasználó munkaterületének beállítása:

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

    A helyére DomainUser írja be a tartomány felhasználónevét. Cserélje le a elemet DomainUserPath a tartományfelhasználó kezdőkönyvtárának elérési útjára. Cserélje le a elemet ClusterVersion a fürt adatplatformjának verziójára.

  2. Új fájl létrehozásához és szerkesztéséhez használja az alábbi utasítást:

    nano workflow.xml
    
  3. A nanoszerkesztő megnyitása után adja meg a következő XML-fájlt a fájl tartalmaként:

    <?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. Cserélje le clustername a elemet a fürt nevére.

  5. A fájl mentéséhez válassza a Ctrl+X billentyűkombinációt. Írja be az Y értéket. Ezután válassza az Enter elemet.

    A munkafolyamat két részre van osztva:

    • Megbízólevél. Ez a szakasz az Oozie-műveletek hitelesítéséhez használt hitelesítő adatokat veszi fel:

      Ez a példa a Hive-műveletek hitelesítését használja. További információ: Művelethitelesítés.

      A hitelesítőadat-szolgáltatás lehetővé teszi, hogy az Oozie-műveletek megszemélyesíthessék a felhasználót a Hadoop-szolgáltatások eléréséhez.

    • Akció. Ez a szakasz három műveletből áll: map-reduce, Hive server 2 és Hive server 1:

      • A térkép-csökkentési művelet egy példát futtat egy Oozie-csomagból a térkép-csökkentéshez, amely az összesített szószámot adja vissza.

      • A Hive server 2 és a Hive server 1 művelet egy HDInsighttal ellátott Hive-mintatáblán futtat lekérdezést.

      A Hive-műveletek a hitelesítő adatok szakaszban meghatározott hitelesítő adatokat használják a hitelesítéshez a műveletelem kulcsszójának cred használatával.

  6. A fájl /user/<domainuser>/examples/apps/map-reduce/workflow.xmlmásolásához használja a workflow.xml következő parancsot:

    hdfs dfs -put workflow.xml /user/<domainuser>/examples/apps/map-reduce/workflow.xml
    
  7. Cserélje le a elemet domainuser a tartomány felhasználónevére.

Az Oozie-feladat tulajdonságfájljának meghatározása

  1. A feladattulajdonságok új fájljának létrehozásához és szerkesztéséhez használja az alábbi utasítást:

    nano job.properties
    
  2. A nanoszerkesztő megnyitása után a fájl tartalmaként használja a következő XML-t:

    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
    
    • Használja a adl://homenameNode tulajdonság URI-ját, ha elsődleges fürttárolóként Azure Data Lake Storage Gen1-et. Ha Azure Blob Storage használ, váltson a következőre: wasb://home. Ha Azure Data Lake Storage Gen2 használ, váltson a következőre: abfs://home.
    • Cserélje le a elemet domainuser a tartomány felhasználónevére.
    • Cserélje le ClusterShortName a elemet a fürt rövid nevére. Ha például a fürt neve https:// [példahivatkozás] sechadoopcontoso.azurehdisnight.net, a clustershortname fürt első hat karaktere: sechad.
    • Cserélje le a elemet jdbcurlvalue a Hive-konfiguráció JDBC URL-címére. Ilyen például a jdbc:hive2://headnodehost:10001/;transportMode=http.
    • A fájl mentéséhez válassza a Ctrl+X billentyűkombinációt, írja be a kifejezést Y, majd válassza az Enter billentyűt.

    Ennek a tulajdonságfájlnak helyileg kell jelen lennie az Oozie-feladatok futtatásakor.

Egyéni Hive-szkriptek létrehozása Oozie-feladatokhoz

Az alábbi szakaszokban látható módon létrehozhatja a Hive-kiszolgáló 1 és a Hive server 2 két Hive-szkriptét.

Hive server 1 fájl

  1. Hozzon létre és szerkesszen egy fájlt a Hive-kiszolgáló 1 műveleteihez:

    nano countrowshive1.hql
    
  2. Hozza létre a szkriptet:

    INSERT OVERWRITE DIRECTORY '${hiveOutputDirectory1}'
    ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
    select devicemake from hivesampletable limit 2;
    
  3. Mentse a fájlt az Apache Hadoop elosztott fájlrendszerbe (HDFS):

    hdfs dfs -put countrowshive1.hql countrowshive1.hql
    

Hive server 2 fájl

  1. Hozzon létre és szerkesszen egy mezőt a Hive Server 2 műveleteihez:

    nano countrowshive2.hql
    
  2. Hozza létre a szkriptet:

    INSERT OVERWRITE DIRECTORY '${hiveOutputDirectory1}' 
    ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' 
    select devicemodel from hivesampletable limit 2;
    
  3. Mentse a fájlt a HDFS-be:

    hdfs dfs -put countrowshive2.hql countrowshive2.hql
    

Oozie-feladatok elküldése

Az Oozie-feladatok ESP-fürtökhöz való elküldése olyan, mintha Oozie-feladatokat küldenének be nem ESP-fürtökön.

További információ: Munkafolyamat definiálása és futtatása Linux-alapú Azure HDInsighton az Apache Oozie és az Apache Hadoop használatával.

Oozie-feladat beküldésének eredményei

A rendszer Oozie-feladatokat futtat a felhasználó számára. Így az Apache Hadoop YARN és az Apache Ranger auditnaplói is megjelenítik a megszemélyesített felhasználóként futtatott feladatokat. Egy Oozie-feladat parancssori felületének kimenete a következő kódhoz hasonlóan néz ki:

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

A Hive-kiszolgáló 2 műveleteinek Ranger-auditnaplói azt mutatják, hogy Oozie futtatja a műveletet a felhasználó számára. A Ranger és a YARN nézet csak a fürt rendszergazdája számára látható.

Felhasználói engedélyezés konfigurálása az Oozie-ban

Az Oozie önmagában is rendelkezik egy felhasználói engedélyezési konfigurációval, amely megakadályozhatja, hogy a felhasználók leállítsanak vagy töröljék más felhasználók feladatait. A konfiguráció engedélyezéséhez állítsa a értéket a oozie.service.AuthorizationService.security.enabled értékre true.

További információ: Az Apache Oozie telepítése és konfigurálása.

Az olyan összetevők esetében, mint a Hive server 1, ahol a Ranger beépülő modul nem érhető el vagy nem támogatott, csak durva hdfS-engedélyezés lehetséges. A részletesebb engedélyezés csak Ranger beépülő modulokon keresztül érhető el.

Az Oozie webes felhasználói felületének lekérése

Az Oozie webes felhasználói felülete webes nézetet biztosít a fürt Oozie-feladatainak állapotáról. A webes felhasználói felület beszerzéséhez hajtsa végre a következő lépéseket az ESP-fürtökben:

  1. Adjon hozzá egy peremhálózati csomópontot , és engedélyezze az SSH Kerberos-hitelesítést.

  2. Az Oozie webes felhasználói felületének lépéseit követve engedélyezze az SSH-bújtatást a peremcsomóponthoz, és hozzáférjen a webes felhasználói felülethez.

Következő lépések