Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Apache Oozie to system przepływu pracy i koordynacji, który zarządza zadaniami apache Hadoop. Rozwiązanie Oozie jest zintegrowane ze stosem usługi Hadoop i obsługuje następujące zadania:
- Apache MapReduce
- Apache Pig
- Apache Hive
- Apache Sqoop
Możesz również użyć Oozie do planowania zadań specyficznych dla systemu, takich jak programy Java lub skrypty powłokowe.
Warunek wstępny
Klaster usługi Azure HDInsight Hadoop z pakietem Enterprise Security (ESP). Zobacz Konfigurowanie klastrów usługi HDInsight przy użyciu protokołu ESP.
Uwaga
Aby uzyskać szczegółowe instrukcje dotyczące korzystania z usługi Oozie w klastrach innych niż ESP, zobacz Korzystanie z przepływów pracy usługi Apache Oozie w usłudze Azure HDInsight opartej na systemie Linux.
Nawiązywanie połączenia z klastrem ESP
Aby uzyskać więcej informacji na temat protokołu Secure Shell (SSH), zobacz Łączenie z usługą HDInsight (Hadoop) przy użyciu protokołu SSH.
Nawiąż połączenie z klastrem usługi HDInsight przy użyciu protokołu SSH:
ssh [DomainUserName]@<clustername>-ssh.azurehdinsight.net
Aby zweryfikować pomyślne uwierzytelnianie Kerberos, użyj
klist
polecenia . Jeśli nie, użyj poleceniakinit
, aby uruchomić uwierzytelnianie Kerberos.Zaloguj się do bramy usługi HDInsight, aby zarejestrować token OAuth wymagany do uzyskania dostępu do usługi Azure Data Lake Storage:
curl -I -u [DomainUserName@Domain.com]:[DomainUserPassword] https://<clustername>.azurehdinsight.net
Kod odpowiedzi stanu 200 OK wskazuje pomyślną rejestrację. Sprawdź nazwę użytkownika i hasło, jeśli zostanie odebrana nieautoryzowana odpowiedź, na przykład 401.
Definiowanie przepływu pracy
Definicje przepływu pracy Oozie są zapisywane w języku apache Hadoop Process Definition Language (hPDL). hPDL to język definicji procesu XML. Wykonaj następujące kroki, aby zdefiniować przepływ pracy:
Konfigurowanie obszaru roboczego użytkownika domeny:
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>/
Zastąp
DomainUser
nazwą użytkownika domeny. ZastąpDomainUserPath
ścieżką katalogu macierzystego użytkownika domeny. ZastąpClusterVersion
wersją platformy danych klastra.Użyj następującej instrukcji, aby utworzyć i edytować nowy plik:
nano workflow.xml
Po otwarciu edytora nano wprowadź następujący kod XML jako zawartość pliku:
<?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>
Zastąp
clustername
nazwą klastra.Aby zapisać plik, wybierz Ctrl+X. Wprowadź wartość Y. Następnie wybierz Enter.
Przepływ pracy jest podzielony na dwie części:
Poświadczenie. Ta sekcja zawiera poświadczenia używane do uwierzytelniania akcji Oozie:
W tym przykładzie użyto uwierzytelniania dla akcji hive. Aby dowiedzieć się więcej, zobacz Action Authentication (Uwierzytelnianie akcji).
Usługa poświadczeń umożliwia akcji Oozie personifikację użytkownika na potrzeby uzyskiwania dostępu do usług Hadoop.
Akcja. Ta sekcja zawiera trzy akcje: map-reduce, Hive Server 2 i Hive Server 1:
Akcja map-reduce uruchamia przykład z pakietu Oozie dla map-reduce, który generuje zliczenie wyrazów.
Akcje serwera Hive 2 i Hive Server 1 uruchamiają zapytanie w przykładowej tabeli programu Hive dostarczonej z usługą HDInsight.
Akcje Hive używają poświadczeń zdefiniowanych w sekcji poświadczeń do uwierzytelniania przy użyciu słowa kluczowego
cred
w elemencie akcji.
Użyj następującego polecenia, aby skopiować plik
workflow.xml
do pliku/user/<domainuser>/examples/apps/map-reduce/workflow.xml
.hdfs dfs -put workflow.xml /user/<domainuser>/examples/apps/map-reduce/workflow.xml
Zastąp
domainuser
nazwą użytkownika dla domeny.
Definiowanie pliku właściwości zadania Oozie
Użyj następującej instrukcji, aby utworzyć i edytować nowy plik dla właściwości zadania:
nano job.properties
Po otwarciu edytora nano użyj następującego kodu XML jako zawartości pliku:
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
- Użyj identyfikatora
adl://home
URI dla właściwościnameNode
, jeśli Azure Data Lake Storage Gen1 jest używana jako podstawowy magazyn klastra. Jeśli używasz usługi Azure Blob Storage, zmień wartość nawasb://home
. Jeśli używasz usługi Azure Data Lake Storage Gen2, przejdź naabfs://home
. - Zastąp
domainuser
swoją nazwą użytkownika dla domeny. - Zastąp
ClusterShortName
krótką nazwą klastra. Jeśli na przykład nazwa klastra to https:// [przykładowy link] sechadoopcontoso.azurehdisnight.net,clustershortname
jest to pierwsze sześć znaków klastra: sechad. - Zastąp ciąg
jdbcurlvalue
adresem URL JDBC z konfiguracji programu Hive. Przykładem jest jdbc:hive2://headnodehost:10001/; transportMode=http. - Aby zapisać plik, naciśnij Ctrl+X, wprowadź ,
Y
a następnie naciśnij Enter.
Ten plik właściwości musi być obecny lokalnie podczas uruchamiania zadań Oozie.
- Użyj identyfikatora
Tworzenie niestandardowych skryptów Hive dla zadań Oozie
Dwa skrypty hive dla serwera Hive 1 i Hive Server 2 można utworzyć, jak pokazano w poniższych sekcjach.
Plik serwera Hive 1
Utwórz i edytuj plik dla akcji serwera Hive 1:
nano countrowshive1.hql
Utwórz skrypt:
INSERT OVERWRITE DIRECTORY '${hiveOutputDirectory1}' ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' select devicemake from hivesampletable limit 2;
Zapisz plik w rozproszonym systemie plików Apache Hadoop (HDFS):
hdfs dfs -put countrowshive1.hql countrowshive1.hql
Plik serwera Hive 2
Tworzenie i edytowanie pola dla akcji serwera Hive 2:
nano countrowshive2.hql
Utwórz skrypt:
INSERT OVERWRITE DIRECTORY '${hiveOutputDirectory1}' ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' select devicemodel from hivesampletable limit 2;
Zapisz plik w systemie plików HDFS:
hdfs dfs -put countrowshive2.hql countrowshive2.hql
Przesyłanie zadań Oozie
Przesyłanie zadań Oozie dla klastrów ESP przypomina przesyłanie zadań Oozie w klastrach innych niż ESP.
Aby uzyskać więcej informacji, zobacz Definiowanie i uruchamianie przepływu pracy w usłudze Azure HDInsight opartego na systemie Linux przy użyciu rozwiązania Apache Oozie z platformą Apache Hadoop.
Wyniki przesyłania zadania Oozie
Zadania Oozie są uruchamiane dla użytkownika. W związku z tym zarówno dzienniki inspekcji usług Apache Hadoop YARN, jak i Apache Ranger pokazują, że zadania są uruchamiane jako personifikowany użytkownik. Dane wyjściowe interfejsu wiersza polecenia zadania Oozie wyglądają podobnie do następującego kodu:
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 -
-----------------------------------------------------------------------------------------------
Rejestry inspekcji Ranger dla działań serwera Hive 2 pokazują, że Oozie uruchamia działanie dla użytkownika. Widoki Ranger i YARN są widoczne tylko dla administratora klastra.
Konfigurowanie autoryzacji użytkownika w usłudze Oozie
Firma Oozie sama ma konfigurację autoryzacji użytkownika, która może uniemożliwić użytkownikom zatrzymywanie lub usuwanie zadań innych użytkowników. Aby włączyć tę konfigurację, ustaw oozie.service.AuthorizationService.security.enabled
na true
.
Aby uzyskać więcej informacji, zobacz Apache Oozie Installation and Configuration (Instalacja i konfiguracja oprogramowania Apache Oozie).
W przypadku składników takich jak Hive server 1, w których wtyczka Ranger nie jest dostępna lub obsługiwana, możliwa jest tylko grubozrnista autoryzacja systemu plików HDFS. Szczegółowa autoryzacja jest dostępna tylko za pośrednictwem wtyczek Ranger.
Uzyskaj internetowy interfejs użytkownika Oozie
Internetowy interfejs użytkownika Oozie udostępnia internetowy widok stanu zadań Oozie w klastrze. Aby uzyskać internetowy interfejs użytkownika, wykonaj następujące kroki w klastrach ESP:
Dodaj węzeł brzegowy i włącz uwierzytelnianie Kerberos za pomocą SSH.
Wykonaj kroki interfejsu użytkownika sieci Web Oozie, aby włączyć tunelowanie SSH do węzła granicznego i uzyskać dostęp do interfejsu użytkownika sieci Web.