Samouczek Apache Oozie: Co to jest, przepływ pracy, przykład – Hadoop

Co to jest OOZIE?

Apache Oozie to harmonogram przepływu pracy dla Hadoop. Jest to system obsługujący obieg zadań zależnych. Tutaj użytkownicy mogą tworzyć Kierowane grafy acykliczne przepływów pracy, które można uruchamiać równolegle i sekwencyjnie w Hadoop.

Składa się z dwóch części:

  • Silnik przepływu pracy: Zadaniem silnika przepływu pracy jest przechowywanie i uruchamianie przepływów pracy składających się z zadań Hadoop, np. MapReduce, Pig, Hive.
  • Silnik koordynatora: Uruchamia zadania przepływu pracy w oparciu o predefiniowane harmonogramy i dostępność danych.

Oozie jest skalowalne i może zarządzać terminowym wykonywaniem tysięcy przepływów pracy (każdy składający się z kilkudziesięciu zadań) w klastrze Hadoop.

OOZIE

Oozie jest również bardzo elastyczny. Można łatwo uruchamiać, zatrzymywać, zawieszać i uruchamiać ponownie zadania. Oozie bardzo ułatwia ponowne uruchomienie nieudanych przepływów pracy. Łatwo zrozumieć, jak trudno jest nadrobić zaległości lub nieudane zadania z powodu przestojów lub awarii. Możliwe jest nawet pominięcie konkretnego węzła, który uległ awarii.

Jak działa OOZIE?

Oozie działa jako usługa w klastrze, a klienci przesyłają definicje przepływów pracy do natychmiastowego lub późniejszego przetworzenia.

Przepływ pracy Oozie składa się z węzły akcji i węzły przepływu sterowania.

An węzeł akcji reprezentuje zadanie przepływu pracy, np. przenoszenie plików do HDFS, uruchamianie MapReduce, Pig lub Ul zadań, importowanie danych za pomocą Sqoop lub uruchamianie skryptu powłoki napisanego programu Java.

A węzeł przepływu sterowania kontroluje wykonywanie przepływu pracy pomiędzy akcjami, umożliwiając konstrukcje takie jak logika warunkowa, w której można podążać różnymi ścieżkami w zależności od wyniku wcześniejszego węzła akcji.

Uruchom węzeł, Węzeł końcowy, Węzeł błędu należą do tej kategorii węzłów.

Węzeł początkowy, wyznacza początek zadania przepływu pracy.

węzeł końcowy, sygnalizuje koniec pracy.

Węzeł błędu oznacza wystąpienie błędu i wydrukowanie odpowiedniego komunikatu o błędzie.

Po zakończeniu wykonywania przepływu pracy Oozie wykorzystuje wywołanie zwrotne HTTP w celu aktualizacji klienta o statusie przepływu pracy. Wejście do lub wyjście z węzła akcji może również wywołać wywołanie zwrotne.

Przykładowy diagram przepływu pracy

Przykładowy diagram przepływu pracy

Pakowanie i wdrażanie aplikacji przepływu pracy Oozie

Aplikacja przepływu pracy składa się z definicji przepływu pracy i wszystkich powiązanych zasobów, takich jak pliki Jar MapReduce, skrypty Pig itp. Aplikacje muszą przestrzegać prostej struktury katalogów i są wdrażane w HDFS aby Oozie miał do nich dostęp.

Przykładowa struktura katalogów pokazana jest poniżej:

<name of workflow>/</name>
??? lib/
? ??? hadoop-examples.jar
??? workflow.xml

Konieczne jest przechowywanie przepływu pracy.xml (pliku definicji przepływu pracy) w katalogu najwyższego poziomu (katalogu nadrzędnym z nazwą przepływu pracy). Katalog Lib zawiera pliki Jar zawierające klasy MapReduce. Aplikację przepływu pracy zgodną z tym układem można zbudować za pomocą dowolnego narzędzia do kompilacji, np. Ant lub Maven.

Taką kompilację należy skopiować do HDFS za pomocą polecenia, na przykład –

% hadoop fs -put hadoop-examples/target/<name of workflow dir> name of workflow

Kroki uruchamiania zadania przepływu pracy Oozie

W tej sekcji zobaczymy, jak uruchomić zadanie przepływu pracy. Aby to uruchomić, użyjemy narzędzia wiersza poleceń Oozie (program kliencki komunikujący się z serwerem Oozie).

1. Wyeksportuj zmienną środowiskową OOZIE_URL, która informuje polecenie oozie, którego serwera Oozie ma użyć (tutaj używamy serwera działającego lokalnie):

% export OOZIE_URL="http://localhost:11000/oozie"

2. Uruchom zadanie przepływu pracy za pomocą-

% oozie job -config ch05/src/main/resources/max-temp-workflow.properties -run

Opcja -config odnosi się do pliku lokalnego Java Properties zawierający definicje parametrów w pliku XML przepływu pracy, a także oozie.wf.application.path, który informuje Oozie o lokalizacji aplikacji przepływu pracy w HDFS.

Przykładowa zawartość pliku właściwości:

nameNode=hdfs://localhost:8020
jobTracker=localhost:8021
oozie.wf.application.path=${nameNode}/user/${user.name}/<name of workflow>

3. Uzyskaj status zadania przepływu pracy-

Status zadania przepływu pracy można zobaczyć za pomocą komendy 'job' z opcją '-info' i podając identyfikator zadania po '-info'.

e.g., % oozie job -info <job id>

Dane wyjściowe pokazują status: RUNNING, KILLED lub SUCCEEDED.

4. Wyniki pomyślnego wykonania przepływu pracy można zobaczyć za pomocą polecenia Hadoop, np.:

% hadoop fs -cat <location of result>

Dlaczego warto używać Oozie?

Głównym celem wykorzystania Oozie jest zarządzanie różnego rodzaju zadaniami przetwarzanymi w systemie Hadoop.

Zależności pomiędzy zadaniami są określane przez użytkownika w formie ukierunkowanych grafów acyklicznych. Oozie zużywa te informacje i dba o ich wykonanie w odpowiedniej kolejności określonej w przepływie pracy. W ten sposób oszczędzany jest czas użytkownika potrzebny na zarządzanie całym przepływem pracy. Dodatkowo Oozie posiada zapis określający częstotliwość realizacji konkretnego zlecenia.

Cechy Ooziego

  • Oozie ma interfejs API klienta i interfejs wiersza poleceń, za pomocą którego można uruchamiać, kontrolować i monitorować zadania Java aplikacji.
  • Korzystając z interfejsów API usług internetowych, można kontrolować zadania z dowolnego miejsca.
  • Oozie umożliwia wykonywanie zadań, które mają być uruchamiane okresowo.
  • Oozie umożliwia wysyłanie powiadomień e-mail po zakończeniu prac.