Apache Nifi: Что Это Такое И Краткий Обзор Его Возможностей

Сегодня на тематических зарубежных сайтах о больших данных можно встретить упоминание о таком относительно новом инструменте для экосистемы Hadoop, как Apache NiFi. Это современный инструмент ETL с открытым исходным кодом.

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

Несмотря на всю свою мощь, NiFi остается довольно простым в использовании.



Apache NiFi: что это такое и краткий обзор его возможностей

Мы в «Ростелекоме» стремимся развивать работу с Hadoop, поэтому уже опробовали и оценили преимущества Apache NiFi по сравнению с другими решениями.

В этой статье я расскажу, почему нас привлек этот инструмент и как мы его используем.



Фон

Не так давно мы столкнулись с выбором решения для загрузки данных из внешних источников в кластер Hadoop. Долгое время мы решали подобные задачи Апач Флюм .

В целом к Flume претензий не было, за исключением нескольких моментов, которые нас не порадовали.

Первый , что нам, как администраторам, не понравилось, так это то, что написание конфига Flume для выполнения очередной тривиальной загрузки нельзя было доверить разработчику или аналитику, не погруженному в тонкости этого инструмента.

Подключение каждого нового источника требовало обязательного вмешательства со стороны администрации.

Второй момент появилась отказоустойчивость и масштабирование.

Для больших нагрузок, например через syslog, нужно было настроить несколько агентов Flume и установить перед ними балансировщик нагрузки.

Все это потом нужно было как-то отслеживать и восстанавливать в случае сбоя.

Третий , Flume не позволял из коробки загружать данные из различных СУБД и работать с некоторыми другими протоколами.

Конечно, в Интернете можно было найти способы заставить Flume работать с Oracle или с SFTP, но поддержка таких «велосипедов» — совсем не приятная задача.

Для загрузки данных из того же Oracle нам пришлось использовать другой инструмент — Апач Скуп .

Честно говоря, я ленивый человек по натуре, и мне совершенно не хотелось поддерживать зоопарк решений.

Еще мне не нравилось, что всю эту работу мне приходилось делать самой.

Конечно, на рынке ETL-инструментов есть довольно мощные решения, способные работать с Hadoop. К ним относятся Informatica, IBM Datastage, SAS и Pentaho Data Integration. Это те, о которых чаще всего слышишь от коллег по цеху и которые первыми приходят на ум.

Кстати, мы используем IBM DataStage для ETL в решениях класса Data Warehouse. Но исторически наша команда не имела возможности использовать DataStage для загрузки в Hadoop. Опять же, нам не нужна была вся мощь решений этого уровня для выполнения довольно простых преобразований и загрузки данных.

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

, которые часто сами являются нашими клиентами данных.

Как видно из названия, перечисленные проблемы мы решили с помощью Apache NiFi.

Что такое Apache NiFi

Название NiFi происходит от «Niagara Files».

Проект разрабатывался в течение восьми лет Агентством национальной безопасности США, а в ноябре 2014 года его исходный код был выложен в открытый доступ и передан Apache Software Foundation в рамках программы трансфера технологий ( Программа передачи технологий АНБ ).

NiFi — это инструмент ETL/ELT с открытым исходным кодом, который может работать со многими системами, не только с системами больших данных и хранилищ данных.

Вот некоторые из них: HDFS, Hive, HBase, Solr, Cassandra, MongoDB, ElastcSearch, Kafka, RabbitMQ, Syslog, HTTPS, SFTP. Полный список вы можете посмотреть на официальном сайте.

документация .

Работа с конкретной СУБД достигается добавлением соответствующего драйвера JDBC. Есть API для написания собственного модуля в качестве дополнительного приемника или преобразователя данных.

Примеры можно найти Здесь И Здесь .



Ключевая особенность

NiFi использует веб-интерфейс для создания DataFlow. Справится и аналитик, только недавно начавший работать с Hadoop, и разработчик, и бородатый админ.

Последние два могут взаимодействовать не только с «прямоугольниками и стрелками», но и с ОТДЫХ API для сбора статистики, мониторинга и управления компонентами DataFlow.

Apache NiFi: что это такое и краткий обзор его возможностей

Веб-интерфейс управления NiFi Ниже я покажу несколько примеров DataFlow для выполнения некоторых распространенных операций.



Apache NiFi: что это такое и краткий обзор его возможностей

Пример загрузки файлов с SFTP-сервера в HDFS В этом примере процессор ListSFTP выводит список файлов на удаленном сервере.

Результат этого листинга используется для параллельной загрузки файлов всеми узлами кластера с помощью процессора FetchSFTP. После этого к каждому файлу добавляются атрибуты, полученные путем разбора его имени, которые затем используются процессором PutHDFS при записи файла в конечный каталог.



Apache NiFi: что это такое и краткий обзор его возможностей

Пример загрузки данных через системный журнал в Kafka и HDFS Здесь с помощью процессора ListenSyslog мы получаем входной поток сообщений.

После этого в каждую группу сообщений добавляются атрибуты о времени их поступления в NiFi и названии схемы в Avro Schema Registry. Далее первая ветвь отправляется на вход в процессор «QueryRecord», который на основе заданной схемы считывает данные и анализирует их с помощью SQL, а затем отправляет в Kafka. Вторая ветвь отправляется процессору MergeContent, который агрегирует данные в течение 10 минут, после чего передает их следующему процессору для конвертации в формат Parquet и записи в HDFS. Вот пример того, как еще можно спроектировать DataFlow:

Apache NiFi: что это такое и краткий обзор его возможностей

Загрузка данных через системный журнал в Kafka и HDFS. Очистка данных в Hive Теперь о преобразовании данных.

NiFi позволяет анализировать данные в обычном формате, запускать на них SQL, фильтровать и добавлять поля, а также преобразовывать один формат данных в другой.

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

С его помощью можно добавлять к данным переменные и атрибуты, сравнивать и вычислять значения, а затем использовать их при формировании различных параметров, например пути для записи в HDFS или SQL-запроса в Hive. Вы можете прочитать больше здесь .



Apache NiFi: что это такое и краткий обзор его возможностей

Пример использования переменных и функций в процессоре UpdateAttribute Пользователь может отслеживать полный путь данных и наблюдать изменения в их содержании и атрибутах.



Apache NiFi: что это такое и краткий обзор его возможностей

Визуализация цепочки DataFlow

Apache NiFi: что это такое и краткий обзор его возможностей

Просмотр содержимого и атрибутов данных Есть отдельный сервис для версионирования DataFlow. Реестр НиФи .

Настроив его, вы получаете возможность управлять изменениями.

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



Apache NiFi: что это такое и краткий обзор его возможностей

Меню контроля версий В NiFi можно контролировать доступ к веб-интерфейсу и разделение прав пользователей.

В настоящее время поддерживаются следующие механизмы аутентификации:

  • На основании сертификатов
  • Имя пользователя и пароль на основе LDAP и Kerberos.
  • Через Апач Нокс
  • Через OpenID Connect
Одновременное использование нескольких механизмов одновременно не поддерживается.

Для авторизации пользователей в системе используются FileUserGroupProvider и LdapUserGroupProvider. Вы можете прочитать об этом больше Здесь .

Как я уже говорил, NiFi может работать в кластерном режиме.

Это обеспечивает отказоустойчивость и дает возможность масштабировать нагрузку по горизонтали.

Статически фиксированного главного узла не существует. Вместо этого Смотритель зоопарка Апачей выбирает один узел в качестве координатора и один в качестве основного.

Координатор получает информацию об их состоянии от других узлов и отвечает за их подключение и отключение от кластера.

Первичный узел используется для запуска изолированных процессоров, которые не следует запускать на всех узлах одновременно.



Apache NiFi: что это такое и краткий обзор его возможностей

Работающий NiFi в кластере

Apache NiFi: что это такое и краткий обзор его возможностей

Распределение нагрузки между узлами кластера на примере процессора PutHDFS

Краткое описание архитектуры и компонентов NiFi



Apache NiFi: что это такое и краткий обзор его возможностей

Архитектура экземпляра NiFi NiFi основан на концепции «Потокового программирования» ( ФБП ).

Вот основные понятия и компоненты, с которыми сталкивается каждый пользователь: FlowFile — сущность, которая представляет собой объект с содержимым нуля или более байтов и соответствующими атрибутами.

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

Атрибуты представляют метаданные FlowFile. Процессор FlowFile — это именно та сущность, которая делает в NiFi основную работу.

Процессор, как правило, имеет одну или несколько функций для работы с FlowFile: создание, чтение/запись и изменение контента, чтение/запись/изменение атрибутов, маршрутизация.

Например, процессор ListenSyslog получает данные по протоколу системного журнала, создавая выходные FlowFiles с атрибутами syslog.version, syslog.hostname, syslog.sender и другими.

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

Связь — обеспечивает соединение и передачу FlowFile между различными процессорами и некоторыми другими объектами NiFi. Connection помещает FlowFile в очередь, а затем передает его по цепочке.

Вы можете настроить способ выбора FlowFiles из очереди, их время жизни, максимальное количество и максимальный размер всех объектов в очереди.

Группа процессов — набор процессоров, их соединений и других элементов DataFlow. Это механизм организации множества компонентов в одну логическую структуру.

Облегчает понимание DataFlow. Порты ввода/вывода используются для получения и отправки данных из групп процессов.

Подробнее об их использовании вы можете прочитать Здесь .

Репозиторий FlowFile — Это место, где NiFi хранит всю известную ему информацию о каждом существующем в данный момент FlowFile в системе.

Репозиторий контента — репозиторий, содержащий содержимое всех FlowFiles, т.е.

сами передаваемые данные.

Репозиторий происхождения — содержит историю каждого FlowFile. Каждый раз, когда с FlowFile происходит событие (создание, модификация и т. д.), в этот репозиторий записывается соответствующая информация.

Веб сервер — предоставляет веб-интерфейс и REST API.

Заключение

С помощью NiFi «Ростелеком» смог улучшить механизм доставки данных в Data Lake на Hadoop. В целом весь процесс стал более удобным и надежным.

Сегодня я могу с уверенностью сказать, что NiFi отлично подходит для выполнения нагрузок на Hadoop. У нас нет проблем с его эксплуатацией.

Кстати, NiFi входит в состав дистрибутива Hortonworks Data Flow и активно развивается самой Hortonworks. Еще у него есть интересный подпроект под названием Apache MiNiFi, который позволяет собирать данные с различных устройств и интегрировать их в DataFlow внутри NiFi.

Дополнительная информация о НиФи

Я думаю, это все.

Спасибо всем за внимание.

Пишите в комментариях, если у вас есть вопросы.

Я буду рад на них ответить.

Теги: #Хранение данных #Большие данные #Hadoop #Apache #etl #управление данными в Ростелекоме

Вместе с данным постом часто просматривают: