Uruchamianie rozwiązania Apache Oozie w klastrach usługi Azure HDInsight przy użyciu pakietu Enterprise Security
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żna również użyć usługi Oozie do planowania zadań specyficznych dla systemu, takich jak programy Java lub skrypty powłoki.
Wymaganie wstępne
Klaster usługi Azure HDInsight Hadoop z pakietem Enterprise Security (ESP). Zobacz Konfigurowanie klastrów usługi HDInsight przy użyciu 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 Connect to HDInsight (Hadoop) using SSH (Nawiązywanie połączenia z usługą HDInsight (Hadoop) przy użyciu protokołu SSH.
Połącz się 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 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 definicji procesów Apache Hadoop (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
ciąg nazwą użytkownika domeny. ZastąpDomainUserPath
ciąg ścieżką katalogu macierzystego użytkownika domeny. ZastąpClusterVersion
element wersją platformy danych klastra.Użyj następującej instrukcji, aby utworzyć i edytować nowy plik:
nano workflow.xml
Po otworzie 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
ciąg nazwą klastra.Aby zapisać plik, naciśnij klawisze Ctrl+X. Wprowadź Y. Następnie wybierz klawisz Enter.
Przepływ pracy jest podzielony na dwie części:
Poświadczeń. Ta sekcja zawiera poświadczenia używane do uwierzytelniania akcji Oozie:
W tym przykładzie użyto uwierzytelniania dla akcji programu Hive. Aby dowiedzieć się więcej, zobacz Action Authentication (Uwierzytelnianie akcji).
Usługa poświadczeń umożliwia akcji Oozie personifikację użytkownika w celu uzyskania dostępu do usług Hadoop.
Działania. Ta sekcja zawiera trzy akcje: map-reduce, Hive Server 2 i Hive Server 1:
Akcja map-reduce uruchamia przykład z pakietu Oozie dla funkcji map-reduce, która generuje zagregowaną liczbę wyrazów.
Akcje programu Hive Server 2 i Hive Server 1 uruchamiają zapytanie w przykładowej tabeli programu Hive dostarczonej z usługą HDInsight.
Akcje programu Hive używają poświadczeń zdefiniowanych w sekcji poświadczeń do uwierzytelniania przy użyciu słowa kluczowego
cred
w elemecie akcji.
Użyj następującego polecenia, aby skopiować
workflow.xml
plik do/user/<domainuser>/examples/apps/map-reduce/workflow.xml
pliku :hdfs dfs -put workflow.xml /user/<domainuser>/examples/apps/map-reduce/workflow.xml
Zastąp
domainuser
ciąg nazwą użytkownika 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 otworzie 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 dlanameNode
właściwości , jeśli masz Azure Data Lake Storage Gen1 jako podstawowy magazyn klastra. Jeśli używasz Azure Blob Storage, zmień wartość nawasb://home
. Jeśli używasz Azure Data Lake Storage Gen2, zmień wartość naabfs://home
. - Zastąp
domainuser
ciąg nazwą użytkownika domeny. - Zastąp
ClusterShortName
ciąg 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
jdbcurlvalue
element adresem URL JDBC z konfiguracji programu Hive. Przykładem jest jdbc:hive2://headnodehost:10001/;transportMode=http. - Aby zapisać plik, naciśnij klawisze Ctrl+X, wprowadź
Y
, a następnie naciśnij klawisz 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
Można utworzyć dwa skrypty hive dla serwera Hive 1 i Hive Server 2, 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 opartej na systemie Linux przy użyciu platformy Apache Oozie z platformą Apache Hadoop.
Wyniki przesyłania zadania Oozie
Zadania Oozie są uruchamiane dla użytkownika. W związku z tym dzienniki inspekcji usług Apache Hadoop YARN i Apache Ranger pokazują, że zadania są uruchamiane jako personifikowany użytkownik. Dane wyjściowe zadania Oozie interfejsu wiersza polecenia 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 -
-----------------------------------------------------------------------------------------------
Dzienniki inspekcji platformy Ranger dla akcji serwera Hive 2 pokazują, że Oozie uruchamia akcję dla użytkownika. Widoki Ranger i YARN są widoczne tylko dla administratora klastra.
Konfigurowanie autoryzacji użytkownika w usłudze Oozie
Sama usługa Oozie ma konfigurację autoryzacji użytkownika, która może uniemożliwiać użytkownikom zatrzymywanie lub usuwanie zadań innych użytkowników. Aby włączyć tę konfigurację oozie.service.AuthorizationService.security.enabled
true
, ustaw wartość .
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, gdzie wtyczka Ranger nie jest dostępna lub obsługiwana, możliwe jest tylko grubsze autoryzacja systemu plików HDFS. Szczegółowa autoryzacja jest dostępna tylko za pośrednictwem wtyczek platformy Ranger.
Uzyskiwanie internetowego interfejsu użytkownika usługi 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ł krawędzi i włącz uwierzytelnianie protokołu Kerberos protokołu SSH.
Postępuj zgodnie z instrukcjami internetowego interfejsu użytkownika usługi Oozie , aby włączyć tunelowanie SSH do węzła brzegowego i uzyskać dostęp do internetowego interfejsu użytkownika.