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.
SSH kullanarak HDInsight kümesine bağlanın:
ssh [DomainUserName]@<clustername>-ssh.azurehdinsight.net
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ınkinit
.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:
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ştirinDomainUserPath
. değerini küme veri platformu sürümünüzle değiştirinClusterVersion
.Yeni bir dosya oluşturmak ve düzenlemek için aşağıdaki deyimi kullanın:
nano workflow.xml
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>
değerini kümenin adıyla değiştirin
clustername
.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.
Dosyasını
/user/<domainuser>/examples/apps/map-reduce/workflow.xml
konumuna kopyalamakworkflow.xml
için aşağıdaki komutu kullanın:hdfs dfs -put workflow.xml /user/<domainuser>/examples/apps/map-reduce/workflow.xml
değerini etki alanının kullanıcı adıyla değiştirin
domainuser
.
Oozie işi için özellikler dosyasını tanımlama
İş özellikleri için yeni bir dosya oluşturmak ve düzenlemek için aşağıdaki deyimi kullanın:
nano job.properties
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çinnameNode
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
Y
ve 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.
- Birincil küme depolama alanınız
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ı
Hive sunucusu 1 eylemleri için dosya oluşturma ve düzenleme:
nano countrowshive1.hql
Betiği oluşturun:
INSERT OVERWRITE DIRECTORY '${hiveOutputDirectory1}' ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' select devicemake from hivesampletable limit 2;
Dosyayı Apache Hadoop Dağıtılmış Dosya Sistemi'ne (HDFS) kaydedin:
hdfs dfs -put countrowshive1.hql countrowshive1.hql
Hive server 2 dosyası
Hive server 2 eylemleri için alan oluşturma ve düzenleme:
nano countrowshive2.hql
Betiği oluşturun:
INSERT OVERWRITE DIRECTORY '${hiveOutputDirectory1}' ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' select devicemodel from hivesampletable limit 2;
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.enabled
true
.
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:
Bir kenar düğümü ekleyin ve SSH Kerberos kimlik doğrulamasını etkinleştirin.
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.