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

Какво е Апачи Оози?
Apache Oozie е планировчик на работни процеси за HadoopТова е система, която управлява работния процес на зависими задачи. Тук потребителите имат право да създават насочени ациклични графики на работни процеси, които могат да се изпълняват паралелно и последователно в Hadoop.
Състои се от две части:
- Механизъм за работен процес: Отговорността на двигателя на работния процес е да съхранява и изпълнява работни процеси, съставени от Hadoop задачи, например, MapReduce, Прасе, Кошер.
- Координаторен двигател: Той изпълнява задачи по работни процеси въз основа на предварително дефинирани графици и наличност на данни.
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
Оози описва работата на три нива. Всеки слой обгръща този под него, така че един пакет в крайна сметка контролира много отделни работни процеси.
| Вид работа | Какво определя | Задействано от |
|---|---|---|
| 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.


