Урок за Apache Oozie: Диаграма на работния процес, Планировчик

⚡ Умно обобщение

Apache Oozie е планировчикът на работни процеси за Hadoop, който изпълнява зависими задачи като насочени ациклични графове, комбинирайки работен процес за действия MapReduce, Pig и Hive с координиращ движещ механизъм, управляван от времето и наличността на данни.

  • 🔘 Два двигателя: Механизъм за работен процес изпълнява графики на задачите на Hadoop; енджин за координатор ги задейства по график или при пристигане на данни.
  • ☑️ Видове възли: Възлите за действие изпълняват работа; контролните възли като decision, fork и join насочват пътя.
  • Три вида работа: Работният поток, координаторът и пакетните задачи се натрупват в цялостен канал за данни.
  • 🧪 внедряване: Приложението за работен процес е директория, съдържаща workflow.xml и lib папка, копирани в HDFS.
  • 🛠️ Команден ред: Комплект OOZIE_URL, изпратете с oozie job -run, след което проверете oozie job -info, докато не се отчете УСПЕШНО.
  • ⚠️ Статус на проекта: Oozie беше преместен в Apache Attic през 2025 г., така че новите тръбопроводи обикновено използват Apache Airflow.

Урок за Apache Oozie, обхващащ работния процес, задачите на координатора и планирането на Hadoop

Какво е Апачи Оози?

Apache Oozie е планировчик на работни процеси за HadoopТова е система, която управлява работния процес на зависими задачи. Тук потребителите имат право да създават насочени ациклични графики на работни процеси, които могат да се изпълняват паралелно и последователно в Hadoop.

Състои се от две части:

  • Механизъм за работен процес: Отговорността на двигателя на работния процес е да съхранява и изпълнява работни процеси, съставени от Hadoop задачи, например, MapReduce, Прасе, Кошер.
  • Координаторен двигател: Той изпълнява задачи по работни процеси въз основа на предварително дефинирани графици и наличност на данни.

Oozie е мащабируем и може да управлява навременното изпълнение на хиляди работни процеси (всеки от които се състои от десетки задачи) в Hadoop клъстер. Диаграмата по-долу показва къде се намира планировчикът спрямо клъстера и задачите, които той управлява.

Планировчикът на работни процеси на Apache Oozie изпълнява зависими Hadoop задачи като насочен ацикличен граф

Oozie е много гъвкав. Човек може лесно да стартира, спира, преустановява и изпълнява отново задачи. Oozie улеснява много повторното изпълнение на неуспешни работни процеси. Човек може лесно да разбере колко трудно може да бъде да навакса пропуснати или неуспешни задачи поради престой или повреда. Възможно е дори да се пропусне конкретен неуспешен възел.

Статус на проекта: Apache Oozie беше пенсиониран от Apache Software Foundation през февруари 2025 г. и преместването към Таванско помещение Апачи завършено през април 2025 г. Финалната версия остава 5.2.1 от февруари 2021 г., а хранилището с изходен код вече е само за четене. Съществуващите клъстери все още го изпълняват, поради което е добре да се знаят механиките по-долу, но новите канали обикновено се изграждат върху Apache Airflow.

Как действа Оози?

Oozie работи като услуга в клъстера, а клиентите подават дефиниции на работни процеси за незабавна или по-късна обработка.

Работният процес на Oozie се състои от възли за действие и възли за контрол на потока.

Възелът за действие представлява задача от работния процес, например преместване на файлове в HDFS, изпълнение на задание MapReduce, Pig или Hive, импортиране на данни с помощта на Sqoopили изпълнение на shell скрипт или програма, написана на Java.

Възелът за управление на потока контролира изпълнението на работния процес между действията, като позволява конструкции като условна логика, при които могат да се следват различни разклонения в зависимост от резултата от по-ранен възел за действие.

Началният възел, Крайният възел и Възелът за грешка попадат в тази категория възли.

  • Стартирайте възела обозначава началото на заданието на работния поток.
  • Краен възел сигнализира края на работата.
  • Възел за грешка обозначава възникването на грешка и съответното съобщение за грешка, което трябва да се отпечата.

В края на изпълнението на работен процес, Oozie използва HTTP обратно извикване, за да актуализира клиента със състоянието на работния процес. Влизането или излизането от възел за действие също може да задейства обратното извикване.

Контролни възли и типове действия на Oozie

Освен начало, край и грешка, XML на работния процес поддържа малък речник от контролни възли, които оформят графиката.

  • решение: Оценява израз и изпраща работния процес надолу по един от няколкото клона, еквивалент на оператор switch.
  • вилицата: Разделя пътя, така че две или повече действия да се изпълняват паралелно.
  • присъединяване: Изчаква завършването на всеки клон на съответстваща вилка, преди да продължи.
  • убий: Прекратява работния процес незабавно и записва съобщението за неуспех.

Възлите за действие обхващат самата работа и всеки от тях има свой собствен XML елемент:

  • map-reduce, pig, hive и sqoop действията стартират съответната задача на Hadoop.
  • Ява изпълнява основен клас на клъстера; черупка намлява SSH изпълнявайте скриптове.
  • fs извършва HDFS домакинска работаping като например преместване, изтриване, mkdir и chmod.
  • електронна поща уведомява получателите и под-работен процес извиква друго приложение за работен процес.

Примерна диаграма на работния процес

Диаграмата по-долу tracизпълнява малък работен процес от началния му възел, през действие MapReduce, до крайния възел или пътя на грешката, когато действието е неуспешно.

Примерна диаграма на работния процес на Oozie, показваща начален възел, възел за действие, обработка на грешки и краен възел

Видове работа в Oozie

Оози описва работата на три нива. Всеки слой обгръща този под него, така че един пакет в крайна сметка контролира много отделни работни процеси.

Вид работа Какво определя Задействано от
Workflow Насочен ацикличен граф на възли за действие и управление, написан във workflow.xml Ръчно подаване или координатор
Координатор Повтарящ се график за един работен процес, с начален час, краен час и честота Наличност на време и входни данни
Пакет Колекция от приложения за координатори, управлявани заедно като един канал за данни Начален час, приложен към всички негови координатори

Разграничението е важно на практика: работният процес отговаря на въпроса „какво се изпълнява“, координаторът отговаря на въпроса „кога се изпълнява“, а пакетът отговаря на въпроса „какво започва и спира заедно“.

Опаковане и внедряване на приложение за работен процес на Oozie

Приложението за работен процес се състои от дефиницията на работен процес и всички свързани ресурси, като например MapReduce JAR файлове, Pig скриптове и др. Приложенията трябва да следват проста структура на директории и да бъдат разположени в HDFS, така че Oozie да може да има достъп до тях.

Примерна структура на директории е показана по-долу:

<name of workflow>/
├── lib/
│   └── hadoop-examples.jar
└── workflow.xml

Необходимо е да се съхранява workflow.xml (файл с дефиниция на работен поток) в директорията от най-високо ниво (родителската директория, носеща името на работния поток). Директорията lib съдържа Jar файлове, съдържащи класове MapReduce. Приложение за работен поток, съответстващо на това оформление, може да бъде изградено с всеки инструмент за изграждане, например Ant или Maven.

Такава компилация трябва да бъде копирана в HDFS с помощта на команда, например:

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

Стъпки за изпълнение на задача на работен поток в Oozie

В този раздел ще видим как да изпълняваме задание за работен поток. За да стартираме това, ще използваме инструмента за команден ред Oozie (клиентска програма, която комуникира със сървъра Oozie).

1. Експортирайте OOZIE_URL променлива на средата, която казва на командата oozie кой Oozie сървър да използва (тук използваме такъв, работещ локално):

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

2. Изпълнете заданието за работен процес, като използвате:

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

Опцията -config се отнася до локален Java файл със свойства, съдържащ дефиниции за параметрите в XML файла на работния поток, както и oozie.wf.application.path, който казва на Oozie местоположението на приложението на работния поток в HDFS.

Примерно съдържание на файла със свойства:

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

3. Получете състоянието на заданието на работния поток.

Състоянието на задача от работен процес може да се види с помощта на подкомандата 'job' с опцията '-info', като след '-info' се посочва идентификаторът на задачата.

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

Изходът показва състояние, което е едно от следните: RUNNING, KILLED или SUCCEEDED.

4. Резултатите от успешното изпълнение на работния процес могат да се видят с помощта на Hadoop команда, като например:

% hadoop fs -cat <location of result>

Защо да използвате Oozie?

Основната цел на използването на Oozie е да управлява различни видове задачи, обработвани в Hadoop система.

Зависимостите между задачите се задават от потребителя под формата на насочени ациклични графове. Oozie използва тази информация и се грижи за тяхното изпълнение в правилния ред, както е посочено в работния процес. По този начин се спестява време на потребителя за управление на целия работен процес. Освен това, Oozie има възможност да определи честотата на изпълнение на конкретна задача.

Характеристики на Oozie

  • Oozie има клиентски API и интерфейс от командния ред, който може да се използва за стартиране, управление и наблюдение на задачи от... Java приложение.
  • Използвайки своите Web Service API, човек може да контролира задачи от всяко място.
  • Oozie има възможност за изпълнение на задачи, които са планирани да се изпълняват периодично.
  • Oozie има възможност да изпраща имейл известия след завършване на задачите.

Oozie срещу Apache Airflow

Тъй като Oozie е пенсиониран, повечето екипи, оценяващи планировчици днес, сравняват това, което вече използват, с Apache Airflow. Двата инструмента решават един и същ проблем от противоположни посоки.

Аспект Апачи Оози въздушен поток Apache
Език на дефинициите Работни процеси, написани като XML DAG-ове, написани като Python код
Обхват Изграден около Hadoop действия като MapReduce, Pig, Hive и Sqoop Общо предназначение, с оператори за облачни услуги, бази данни и контейнери
Scheduling Координаторски работни места, обвързани с времето и наличността на данни Интервали на планиране плюс сензори, които чакат външни условия
Състояние на проекта Пенсиониран в Apache Attic през 2025 г.; окончателна версия 5.2.1 Активно разработен проект от най-високо ниво за Apache

Oozie остава по-простият вариант в клъстер, който вече го изпълнява, защото действията се съпоставят едно към едно с компонентите на Hadoop. Airflow е практичният избор за всичко ново, особено когато даден конвейер се простира отвъд Hadoop.

Въпроси и Отговори

Не. Софтуерът Apache Foundation Пенсионира Oozie през февруари 2025 г. и завърши преместването на тавана през април 2025 г. Финалната версия е 5.2.1 от февруари 2021 г. и хранилището е само за четене, въпреки че документацията остава онлайн.

Асистентите с изкуствен интелект превръщат описания конвейер в конфигурация на планировчика, обясняват защо графът на задачите е блокирал и обобщават регистрационните файлове на клъстера във вероятна първопричина. Полезно е за първия проект и за триаж, а не за одобряване на производствен график.

Copilot пише бързо правдоподобен workflow.xml, но често измисля имена на елементи или грешна версия на схемата. Валидирайте генерирания XML спрямо схемата 5.2.1 и първо го изпробвайте на тестов клъстер.

Координаторът комбинира честота, начално време и крайно време с дефиниции на набор от данни. Той се задейства само когато часовникът достигне следващия интервал и всеки деклариран входен набор от данни съществува в HDFS, така че закъснелите данни забавят изпълнението.

Изпратете заданието отново с действието за повторно изпълнение и оригиналния идентификатор на заданието, като наименувате възлите, които да се пропуснат или повторят. Oozie използва повторно завършените действия, така че се изпълнява само останалата част от графиката.

PREP означава, че заданието е прието, но не е стартирано, обикновено защото пътят на приложението в HDFS е грешен или времето за материализация не е настъпило. SUSPENDED означава, че някой го е поставил на пауза или е извършено неуспешно действие и работният процес е спрян.

Сървърът работи със собствен принципал и keytab, а клиентите се удостоверяват чрез SPNEGO през HTTP. Работните потоци носят токени за делегиране, така че всяко действие достига до HDFS и YARN като подаващ потребител, а не като сървър.

Cron изпълнява команда и я забравя. Планировчик tracks зависимости между задачите, изчаква входните данни да пристигнат, записва състоянието на всяко действие и ви позволява да изпълните отново само частта, която е претърпяла неуспех.

Обобщете тази публикация с: