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.
Připojte se ke clusteru HDInsight pomocí SSH:
ssh [DomainUserName]@<clustername>-ssh.azurehdinsight.net
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říkazukinit
.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:
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ďteDomainUserPath
cestou k domovskému adresáři pro uživatele domény. NahraďteClusterVersion
verzí datové platformy clusteru.K vytvoření a úpravě nového souboru použijte následující příkaz:
nano workflow.xml
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>
Nahraďte
clustername
názvem clusteru.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.
Pomocí následujícího příkazu zkopírujte
workflow.xml
soubor do/user/<domainuser>/examples/apps/map-reduce/workflow.xml
složky :hdfs dfs -put workflow.xml /user/<domainuser>/examples/apps/map-reduce/workflow.xml
Nahraďte
domainuser
svým uživatelským jménem pro doménu.
Definování souboru vlastností pro úlohu Oozie
Pomocí následujícího příkazu vytvořte a upravte nový soubor pro vlastnosti úlohy:
nano job.properties
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ě clusterunameNode
používáte Azure Data Lake Storage Gen1, použijte pro vlastnost identifikátor URI. Pokud používáte Azure Blob Storage, změňte nawasb://home
. Pokud používáte Azure Data Lake Storage Gen2, změňte naabfs://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
Y
a 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
Vytvoření a úprava souboru pro akce serveru Hive 1:
nano countrowshive1.hql
Vytvořte skript:
INSERT OVERWRITE DIRECTORY '${hiveOutputDirectory1}' ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' select devicemake from hivesampletable limit 2;
Uložte soubor do systému souborů APACHE Hadoop Distributed File System (HDFS):
hdfs dfs -put countrowshive1.hql countrowshive1.hql
Soubor serveru Hive 2
Vytvoření a úprava pole pro akce serveru Hive 2:
nano countrowshive2.hql
Vytvořte skript:
INSERT OVERWRITE DIRECTORY '${hiveOutputDirectory1}' ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' select devicemodel from hivesampletable limit 2;
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.enabled
true
.
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:
Přidejte hraniční uzel a povolte ověřování protokolem Kerberos SSH.
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í.