Практическо приложение на Oozie, механизъм за работен процес за Hadoop
Apache Oozie е машина за планиране на работен поток за платформата Hadoop. Архитектурата му, показана на фигура 1, улеснява координирането на взаимосвързани, повтарящи се задачи с помощта на координатор Oozie, който може да работи или в планирано време, или въз основа на наличността на данни. Можете да изпълнявате и поддържате набора от задачи на Oozie Coordinator, като използвате системата Oozie Bundle. В този пример Oozie изпълнява задача на Apache Sqoop, за да извърши действието по импортиране на данни от MySQL DBMS и прехвърляне на тези данни към файловата система HDFS (Hadoop Distributed File System). Извършва се действие за сливане на Sqoop, за да се замени остарелият набор от данни с импортирания набор от данни. Действието на UNIX Shell осигурява извличане на метаданни, което се използва за изпълнение на задача на Sqoop срещу MySQL база данни. Той също така изпълнява Java действие за актуализиране на метаданните в MySQL базата данни, изисквана от заданието на Sqoop.
Издание за бърз старт на InfoSphere BigInsights
Фигура 1. Контролна архитектура на Oozie
Какво трябва да се инсталира
За да проучите напълно примерите в тази статия, ще ви е необходим следният софтуер:
Клъстерът е разпределен клъстер с един главен възел с имена, два главни възела и осем възела на задачи.
Работен процес на Oozie
Работният поток на Oozie е колекция от дейности на Oozie, организирани като насочена ациклична графика (DAG) с контролна зависимост. Контролна зависимост означава, че дадено действие не се изпълнява, докато предишното не завърши успешно. Статията започва с кратък преглед на възлите на работния процес и след товафокусира основно върху следните възли на дейност в работния процес:
Възли на работния процес
Контролният възел за стартиране, както е показано в списък 1, е началната точка за дефиниране на работен поток. При стартиране работният процес автоматично се прехвърля към възела, посочен в началото.
Листинг 1. Стартиране на контролен възел
Възелът за контрол на завършването, както е показано в листинг 2, е крайната точка за дефиниране на работен поток. Това показва, че дейностите в работния поток са завършени успешно. Дефиницията на работния поток трябва да включва краен възел.
Списък 2. Възел за контрол на завършването
Контролният възел на прекъсването, както е показано в списък 3, гарантира, че заданието на работния поток е спряно. Ако една или повече от дейностите, стартирани от заданието на работния поток, се изпълнят при достигане на възела за прекъсване, всички те се спират. Дефиницията на работен поток може да не съдържа прекъсващи възли изобщо или произволен брой прекъсващи възли.
Листинг 3. Контролен възел на прекъсване
Възелът за контрол на решенията, както е показано в листинг 4, позволява на работния поток да реши кой път да изпълни. Възелът за вземане на решения работи като блок за превключване, който има набор от двойки предикат-преход, както и преход по подразбиране. Предикатите се оценяват по ред, докато един от тях не бъде удовлетворен; тогава се извършва съответният преход. Ако нито един от предикатите не е изпълнен, се извършва преход по подразбиране.
Листинг 4. Възел за контрол на решения
Разклонен възел разделя един път за изпълнение на много паралелни пътища. Свързващият възел изчаква, докато всички паралелни пътеки за изпълнение от предходния клонов възел достигнат до свързващия възел. Разклонителни възли ивръзките се използват по двойки, както е показано в списък 5.
Листинг 5. Контролен възел на разклонение
Shell-action Oozie
Действие на обвивка в работен поток на Oozie може да бъде конфигурирано да изпълнява набор от скриптове на обвивка във файл. Действието на обвивката на Oozie може да съдържа елементите job-tracker, name-node и exec с необходимите аргументи за изпълнение на задачите, както е показано в списък 6. Действието на обвивката може да бъде конфигурирано да създава или изтрива файлове и директории в HDFS, преди да стартира заданията на обвивката. Можете да предадете XML файл с конфигурационни параметри към задание на Shell, като използвате елемента job-xml с конфигурационни елементи. Можете да конфигурирате допълнителни файлове или архиви, за да ги направите достъпни за заданието на Shell. Резултатът от Shell Job може да бъде направен достъпен за задание на работен поток, след като Shell Job приключи, но трябва да бъдат изпълнени следните критерии:
- Форматът на резултата трябва да съответства на формата на файла със свойства на Java.
- Размерът на получения файл не трябва да надвишава 2 KB.
Листинг 6. Shell скрипт
Листинг 7 показва конфигурацията на действието Shell във файла workflow.xml.
Листинг 7. Действие на Oozie shell
Можете да използвате инкременталното задание на Sqoop, показано в листинг 8, за достъп до резултата от действие на Shell.
Списък 8. Действие на Oozie Sqoop за постепенно импортиране
Oozie Java действие
Дейността на Java изпълнява публичния статичен void main(String[] args) метод на указания главен Java клас. Java приложенията се изпълняват на Hadoop клъстер като MapReduce задания с една задача за картографиране. Заданието на работния поток изчаква активността на Java да завърши, преди да премине към следващата дейност. java действиеконфигуриран с помощта на job-tracker, name-node, Java базов клас, JVM опции и входни аргументи, както е показано в листинг 9. Изразите на Expression Language (EL) могат да се използват за присвояване на параметри на стойностите на свойствата. Всички изходни параметри трябва да бъдат записани във формат на файла със свойства на Java.
Можете да конфигурирате действие на Java за почистване на HDFS файлове и директории или за разделяне на Apache HCatalog, преди да стартирате Java приложение. Това ще позволи на Oozie да опита отново действието на Java, ако не успее временно или постоянно.
Списък 9. Java действие Oozie
Java действие може да бъде конфигурирано с помощта на capture-output за предаване на стойности към следващото действие. Тези стойности могат да бъдат достъпни с помощта на функцията Hadoop EL. Можете да записвате стойности във формат на файл със свойства на Java в Java клас, както е показано в списък 10.
Листинг 10. Java кодов фрагмент за предаване на стойности
Можете да конфигурирате действия във файла workflow.xml, за да осигурите достъп до подходящия набор от стойности във файла със свойства, както е показано в списък 11.
Списък 11. Oozie Java действие за предаване на стойности
Oozie Sqoop Екшън
Работният поток на Oozie извиква Sqoop скрипт, който изпълнява Sqoop задание на Hadoop клъстера. Заданието Sqoop изпълнява задачи, като изпълнява задания на MapReduce в клъстера Hadoop. Заданието MapReduce, изпълнявано от скрипта Sqoop, прехвърля данни от релационната СУБД към HDFS. Можете да конфигурирате действие на Sqoop, както е показано в листинг 12, за изтриване на файлове и директории на HDFS, преди да стартирате заданието на Sqoop. Както при другите действия на Oozie, можете да конфигурирате действие на Sqoop с допълнителни свойства, като използвате елемента job-xml. Стойностите на свойствата, посочени в елементаконфигурация замени свойствата, посочени в елемента job-xml. Допълнителни файлове и архиви могат да бъдат предоставени на заданието на Sqoop.
Листинг 12. Действието sqoop на Oozie за извършване на сливането
Кошерно действие Oozie
Както е показано в листинг 13, можете да конфигурирате действие Hive за изпълнение на всеки Hive скрипт с файлове и директории на HDFS. Действието изпълнява задача на MapReduce, за да изпълни тези задачи. Действието Hive се конфигурира в Oozie с помощта на конфигурационния файл Hive hive-default.xml или hive-site.xml като елемент job-xml. Това изисква Oozie да има достъп до средата на Hive. Можете да конфигурирате действие Hive за създаване или изтриване на файлове и директории в HDFS, преди да стартирате Hive Job. Стойностите на свойствата, посочени в конфигурационния елемент, заменят стойностите, посочени във файла job-xml. Могат да се добавят допълнителни файлове или архиви, за да бъдат достъпни за задачата Hive. Oozie изпълнява скрипта Hive, указан с помощта на пътя в елемента на скрипта. Можете да присвоите параметри на скрипт Hive като входни параметри чрез работния процес на Oozie.
Списък 13. Действието на кошера на Oozie
Oozie имейл действие
Листинг 14. Действие за имейл Oozie
Заключение
Работният поток на Oozie се превръща в тръбопровод за обработка на данни, който комбинира много взаимозависими задачи, през които преминава потокът от данни. Технологията за управление на работния поток на Apache Oozie опростява дизайна на логическия поток от данни, обработката на грешки, механизма за възстановяване и т.н. За да подобрите управлението на работния поток, можете да конфигурирате съответно заданието на Oozie Coordinator или пакетните приложения, но обсъждането на тези проблеми е извън обхвата на тази статия. Има и други еквивалентиМеханизми за работен поток за Hadoop като Amazon Data Pipeline, Simple Workflow Engine, Azkaban, Cascading и Hamake. Hamake и Oozie са конфигурирани в XML, Azkaban е конфигуриран с помощта на текстов файл, съдържащ двойки ключ-стойност, а Cascading е конфигуриран с помощта на Java API.
Изтегляне на ресурси
- това съдържание в PDF
- Изходният код на статията (oozie-artifacts.zip 8KB)