Share via


Kurumsal Güvenlik Paketi ile Azure HDInsight kümelerinde Apache Oozie çalıştırma

Apache Oozie, Apache Hadoop işlerini yöneten bir iş akışı ve koordinasyon sistemidir. Oozie, Hadoop yığınıyla tümleşiktir ve aşağıdaki işleri destekler:

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

Java programları veya kabuk betikleri gibi bir sisteme özgü işleri zamanlamak için Oozie'yi de kullanabilirsiniz.

Önkoşul

Kurumsal Güvenlik Paketi (ESP) ile bir Azure HDInsight Hadoop kümesi. Bkz. ESP ile HDInsight kümelerini yapılandırma.

Not

Oozie'yi ESP dışı kümelerde kullanma hakkında ayrıntılı yönergeler için bkz. Linux tabanlı Azure HDInsight'ta Apache Oozie iş akışlarını kullanma.

ESP kümesine bağlanma

Secure Shell (SSH) hakkında daha fazla bilgi için bkz. SSH kullanarak HDInsight'a (Hadoop) bağlanma.

  1. SSH kullanarak HDInsight kümesine bağlanın:

    ssh [DomainUserName]@<clustername>-ssh.azurehdinsight.net
    
  2. Kerberos kimlik doğrulamasının klist başarılı olduğunu doğrulamak için komutunu kullanın. Aksi takdirde Kerberos kimlik doğrulamasını başlatmak için kullanın kinit .

  3. Azure Data Lake Storage erişmek için gereken OAuth belirtecini kaydetmek için HDInsight ağ geçidinde oturum açın:

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

    200 Tamam durum yanıt kodu, kaydın başarılı olduğunu gösterir. Yetkisiz yanıt alınıp alınmadığını (örneğin, 401) kullanıcı adını ve parolayı denetleyin.

İş akışını tanımlama

Oozie iş akışı tanımları Apache Hadoop İşlem Tanımı Dili 'nde (hPDL) yazılır. hPDL bir XML işlem tanımı dilidir. İş akışını tanımlamak için aşağıdaki adımları uygulayın:

  1. Etki alanı kullanıcılarının çalışma alanını ayarlama:

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

    değerini etki alanı kullanıcı adıyla değiştirin DomainUser . değerini etki alanı kullanıcısının giriş dizini yoluyla değiştirin DomainUserPath . değerini küme veri platformu sürümünüzle değiştirin ClusterVersion .

  2. Yeni bir dosya oluşturmak ve düzenlemek için aşağıdaki deyimi kullanın:

    nano workflow.xml
    
  3. Nano düzenleyici açıldıktan sonra, dosya içeriği olarak aşağıdaki XML'yi girin:

    <?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. değerini kümenin adıyla değiştirin clustername .

  5. Dosyayı kaydetmek için Ctrl+X tuşlarına basın. Y girin. Ardından Enter'ı seçin.

    İş akışı iki bölüme ayrılır:

    • Kimlik bilgisi. Bu bölüm, Oozie eylemlerinin kimliğini doğrulamak için kullanılan kimlik bilgilerini alır:

      Bu örnekte Hive eylemleri için kimlik doğrulaması kullanılır. Daha fazla bilgi için bkz . Eylem Kimlik Doğrulaması.

      Kimlik bilgisi hizmeti, Oozie eylemlerinin Hadoop hizmetlerine erişmek için kullanıcının kimliğine bürünmesini sağlar.

    • Eylem. Bu bölümde üç eylem vardır: map-reduce, Hive server 2 ve Hive server 1:

      • Harita azaltma eylemi, bir Oozie paketinden toplanan sözcük sayısını veren bir harita azaltma örneği çalıştırır.

      • Hive sunucusu 2 ve Hive sunucusu 1 eylemleri, HDInsight ile sağlanan örnek hive tablosunda bir sorgu çalıştırır.

      Hive eylemleri, eylem öğesinde anahtar sözcüğünü cred kullanarak kimlik doğrulaması için kimlik bilgileri bölümünde tanımlanan kimlik bilgilerini kullanır.

  6. Dosyasını /user/<domainuser>/examples/apps/map-reduce/workflow.xmlkonumuna kopyalamak workflow.xml için aşağıdaki komutu kullanın:

    hdfs dfs -put workflow.xml /user/<domainuser>/examples/apps/map-reduce/workflow.xml
    
  7. değerini etki alanının kullanıcı adıyla değiştirin domainuser .

Oozie işi için özellikler dosyasını tanımlama

  1. İş özellikleri için yeni bir dosya oluşturmak ve düzenlemek için aşağıdaki deyimi kullanın:

    nano job.properties
    
  2. Nano düzenleyici açıldıktan sonra dosyanın içeriği olarak aşağıdaki XML'yi kullanın:

    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
    
    • Birincil küme depolama alanınız adl://home olarak Azure Data Lake Storage 1. Nesil'e sahipseniz özelliği için nameNode URI'yi kullanın. Azure Blob Depolama kullanıyorsanız olarak değiştirinwasb://home. Azure Data Lake Storage 2. Nesil kullanıyorsanız olarak değiştirinabfs://home.
    • değerini etki alanının kullanıcı adıyla değiştirin domainuser .
    • değerini kümenin kısa adıyla değiştirin ClusterShortName . Örneğin, küme adı sechadoopcontoso.azurehdisnight.net https:// [örnek bağlantı] ise, clustershortname kümenin ilk altı karakteridir: sechad.
    • değerini Hive yapılandırmasındaki JDBC URL'si ile değiştirin jdbcurlvalue . Örnek olarak jdbc:hive2://headnodehost:10001/;transportMode=http gösteriliyor.
    • Dosyayı kaydetmek için Ctrl+X tuşlarına basın, girin Yve ardından Enter tuşuna basın.

    Oozie işleri çalıştırılırken bu özellikler dosyasının yerel olarak mevcut olması gerekir.

Oozie işleri için özel Hive betikleri oluşturma

Aşağıdaki bölümlerde gösterildiği gibi Hive server 1 ve Hive server 2 için iki Hive betik oluşturabilirsiniz.

Hive sunucusu 1 dosyası

  1. Hive sunucusu 1 eylemleri için dosya oluşturma ve düzenleme:

    nano countrowshive1.hql
    
  2. Betiği oluşturun:

    INSERT OVERWRITE DIRECTORY '${hiveOutputDirectory1}'
    ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
    select devicemake from hivesampletable limit 2;
    
  3. Dosyayı Apache Hadoop Dağıtılmış Dosya Sistemi'ne (HDFS) kaydedin:

    hdfs dfs -put countrowshive1.hql countrowshive1.hql
    

Hive server 2 dosyası

  1. Hive server 2 eylemleri için alan oluşturma ve düzenleme:

    nano countrowshive2.hql
    
  2. Betiği oluşturun:

    INSERT OVERWRITE DIRECTORY '${hiveOutputDirectory1}' 
    ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' 
    select devicemodel from hivesampletable limit 2;
    
  3. Dosyayı HDFS'ye kaydedin:

    hdfs dfs -put countrowshive2.hql countrowshive2.hql
    

Oozie işlerini gönderme

ESP kümeleri için Oozie işleri göndermek, ESP olmayan kümelerde Oozie işleri göndermeye benzer.

Daha fazla bilgi için bkz. Linux tabanlı Azure HDInsight üzerinde iş akışı tanımlamak ve çalıştırmak için Apache Hadoop ile Apache Oozie kullanma.

Oozie işi gönderimi sonuçları

Oozie işleri kullanıcı için çalıştırılır. Bu nedenle hem Apache Hadoop YARN hem de Apache Ranger denetim günlükleri, kimliğine bürünülen kullanıcı olarak çalıştırılan işleri gösterir. Oozie işinin komut satırı arabirimi çıkışı aşağıdaki koda benzer:

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

Hive server 2 eylemleri için Ranger denetim günlükleri, Oozie'nin kullanıcı için eylemi çalıştırdığını gösterir. Ranger ve YARN görünümleri yalnızca küme yöneticisi tarafından görülebilir.

Oozie'de kullanıcı yetkilendirmesini yapılandırma

Oozie tek başına kullanıcıların diğer kullanıcıların işlerini durdurmalarını veya silmelerini engelleyebilecek bir kullanıcı yetkilendirme yapılandırmasına sahiptir. Bu yapılandırmayı etkinleştirmek için olarak ayarlayın oozie.service.AuthorizationService.security.enabledtrue.

Daha fazla bilgi için bkz. Apache Oozie Yüklemesi ve Yapılandırması.

Ranger eklentisinin kullanılamadığı veya desteklenmediği Hive server 1 gibi bileşenler için yalnızca kaba ayrıntılı HDFS yetkilendirmesi mümkündür. Ayrıntılı yetkilendirme yalnızca Ranger eklentileri aracılığıyla kullanılabilir.

Oozie web kullanıcı arabirimini edinin

Oozie web kullanıcı arabirimi, kümedeki Oozie işlerinin durumuna yönelik web tabanlı bir görünüm sağlar. Web kullanıcı arabirimini almak için ESP kümelerinde aşağıdaki adımları uygulayın:

  1. Bir kenar düğümü ekleyin ve SSH Kerberos kimlik doğrulamasını etkinleştirin.

  2. Kenar düğümüne SSH tüneli oluşturmayı etkinleştirmek ve web kullanıcı arabirimine erişmek için Oozie web kullanıcı arabirimi adımlarını izleyin.

Sonraki adımlar