Учебное пособие по Apache Oozie: диаграмма рабочего процесса, планировщик.

⚡ Умное резюме

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

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

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

Что такое Apache Oozie?

Apache Oozie — это планировщик рабочих процессов для HadoopЭто система, которая управляет рабочим процессом зависимых заданий. Здесь пользователям разрешено создавать направленные ациклические графы рабочих процессов, которые могут выполняться параллельно и последовательно в Hadoop.

Он состоит из двух частей:

  • Механизм рабочих процессов: Задача механизма управления рабочими процессами — хранить и запускать рабочие процессы, состоящие из заданий Hadoop, например: Уменьшение карты, Свинья, Hive.
  • Координационный механизм: Она запускает задачи рабочего процесса на основе предопределенного расписания и наличия данных.

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

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

Oozie также очень гибок. Можно легко запускать, останавливать, приостанавливать и перезапускать задания. Oozie значительно упрощает повторный запуск неудачно завершившихся рабочих процессов. Легко понять, как сложно бывает наверстать упущенные или завершившиеся неудачей задания из-за простоя или сбоя. Можно даже пропустить конкретный отказавший узел.

Статус проекта: Apache Oozie был выведен из эксплуатации компанией Apache Software. Foundation в феврале 2025 года и переезд в Чердак Апачи Завершено в апреле 2025 года. Финальная версия — 5.2.1 от февраля 2021 года, а репозиторий исходного кода теперь доступен только для чтения. Существующие кластеры по-прежнему используют его, поэтому стоит знать описанные ниже механизмы, но новые конвейеры обычно строятся на Apache Airflow.

Как работает Oozie?

Oozie работает как сервис в кластере, и клиенты отправляют определения рабочих процессов для немедленной или отложенной обработки.

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

Узел действия представляет собой задачу рабочего процесса, например, перемещение файлов в HDFSзапуск задания MapReduce, Pig или Hive, импорт данных с использованием Скупили при запуске скрипта оболочки или программы, написанной на Java.

Узел управления потоком выполнения контролирует выполнение рабочего процесса между действиями, позволяя использовать такие конструкции, как условная логика, в которой различные ветви могут следовать в зависимости от результата предыдущего действия.

К этой категории узлов относятся начальный узел, конечный узел и узел ошибки.

  • Начальный узел обозначает начало задания рабочего процесса.
  • Конечный узел сигнализирует об окончании работы.
  • Узел ошибки Обозначает возникновение ошибки и соответствующее сообщение об ошибке, которое необходимо вывести на экран.

В конце выполнения рабочего процесса Oozie использует HTTP-обратный вызов для обновления статуса рабочего процесса на стороне клиента. Вход в узел действия или выход из него также могут инициировать этот обратный вызов.

Узлы управления Oozie и типы действий

Помимо начального, конечного и ошибочного этапов, XML-файл рабочего процесса поддерживает небольшой набор управляющих узлов, формирующих граф.

  • решение: Выполняет оценку выражения и направляет рабочий процесс по одной из нескольких ветвей, что эквивалентно оператору switch.
  • вилка: Разделяет путь таким образом, чтобы два или более действий выполнялись параллельно.
  • присоединиться: Дождется завершения построения каждой ветви соответствующей ветки, прежде чем продолжить.
  • убийство: Немедленно завершает рабочий процесс и записывает сообщение об ошибке.

Узлы действий описывают саму работу, и каждый из них имеет свой собственный XML-элемент:

  • map-reduce, pig, hive и sqoop Эти действия запускают соответствующее задание Hadoop.
  • Ява запускает основной класс в кластере; оболочка и SSH Запускать скрипты.
  • fs выполняет очистку HDFSping например, move, delete, mkdir и chmod.
  • e-mail уведомляет получателей и подпроцесс вызывает другое приложение для управления рабочим процессом.

Пример схемы рабочего процесса

Схема ниже tracЭто небольшой рабочий процесс, начинающийся с начального узла, проходящий через действие MapReduce, и заканчивающийся либо конечным узлом, либо путем обработки ошибок в случае сбоя действия.

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

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

Oozie описывает работу на трех уровнях. Каждый уровень является оберткой для нижележащего, поэтому в конечном итоге пакет управляет множеством отдельных рабочих процессов.

Тип вакансии Что это определяет Вызваны
Процесс Направленный ациклический граф узлов действий и управления, записанный в файле workflow.xml. Ручная подача или координатор
Координатор Повторяющееся расписание для одного рабочего процесса с указанием времени начала, времени окончания и частоты. Доступность времени и входных данных.
Набор Набор координационных приложений, управляемых совместно как единый конвейер обработки данных. Установлено время начала работы для всех координаторов.

На практике это различие имеет значение: рабочий процесс отвечает на вопрос «что выполняется», координатор отвечает на вопрос «когда он выполняется», а пакет отвечает на вопрос «что запускается и останавливается одновременно».

Упаковка и развертывание приложения Oozie для управления рабочими процессами.

Приложение для управления рабочим процессом состоит из определения рабочего процесса и всех связанных с ним ресурсов, таких как JAR-файлы MapReduce, скрипты 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 имеет клиентский API и интерфейс командной строки, которые можно использовать для запуска, управления и мониторинга заданий. Java Приложение.
  • Используя API веб-сервисов, можно управлять заданиями из любой точки мира.
  • В Oozie предусмотрена возможность выполнения заданий, запланированных на периодическое запуск.
  • В Oozie предусмотрена возможность отправки уведомлений по электронной почте по завершении заданий.

Oozie против Apache Airflow

Поскольку Oozie больше не используется, большинство команд, оценивающих сегодня планировщик задач, сравнивают уже имеющиеся у них инструменты с Apache Airflow. Оба инструмента решают одну и ту же проблему, но с противоположных сторон.

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

Oozie остается более простым вариантом для кластера, который уже на нем работает, поскольку действия напрямую соответствуют компонентам Hadoop. Airflow — это практичный выбор для всего нового, особенно если конвейер выходит за рамки Hadoop.

Часто задаваемые вопросы (FAQ)

Нет. Программное обеспечение 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 отправляет команду и забывает её выполнить. Планировщик задач. tracОтслеживает зависимости между заданиями, ожидает поступления входных данных, записывает состояние каждого действия и позволяет повторно запустить только ту часть, которая завершилась с ошибкой.

Подведем итог этой публикации следующим образом: