Все грани Apache NiFi для построения ETL-pipeline’ов и обработки потоковых данных с Kafka и Spark

Автор Категория , , , , ,
Все грани Apache NiFi для построения ETL-pipeline’ов и обработки потоковых данных с Kafka и Spark

Продолжая разговор про инженерию больших данных, сегодня рассмотрим, как построить ETL-pipeline на открытых технологиях Big Data. Читайте далее про получение, агрегацию, фильтрацию, маршрутизацию и обработку потоковых данных с помощью Apache NiFi, Kafka и Spark, преобразование JSON, а также обогащение и сохранение данных в Hive, HDFS и Amazon S3.

Пример потокового конвейера обработки данных на технологиях Big Data

Разберем кейс, когда необходимо использовать несколько источников, включая каналы REST, социальные каналы, сообщения, изображения, документы и реляционные данные. Типовой конвейер обработки данных (data pipeline) в этом случае будет выглядеть следующим образом [1]:

  • Apache NiFi принимает потоковые данные, фильтрует их, обрабатывает и отправляет в соответствующие топики Apache Kafka с учетом схем для записи форматов сообщений.
  • Дополнительная обработка событий для последующей аналитики больших данных и тренировки алгоритмов машинного обучения выполняется в рамках приложений Kafka Streams, Spark и NiFi.
  • Для оперативной аналитики и генерации сводок в реальном времени данные сохраняются в Apache Druid– колоночной СУБД, ориентированной на быструю обработку больших, редко изменяющихся массивов данных и немедленного предоставления доступа к ним. Обычно Druid применяется в решениях, где необходим прием информации в реальном времени из одного большого потока данных [2].
  • В качестве постоянного хранилища данных используются Apache Hive, HDFS и Amazon
  • За машинное обучение отвечают Spark ML, TensorFlow и Apache MXNet.
  • Отправка очищенных и агрегированных данных подписчикам выполняется через Kafka и NiFi.
  • Конечная аналитика и визуализация данных реализуется через интерактивные дэшборды с помощью Apache Superset, Superset и Spark SQL.
  • Обеспечение базовой информационной безопасности поддерживается в виде авторизации, аутентификации, аудита, шифрования и передачи данных через Apache Ranger, Atlas и NiFi.
  • Для управления исходным кодом в лучших практиках DataOps используются реестр NiFi и github.
  • Комплексное администрирование экосистемы Hadoop выполняется в рамках Apache Ambari.
архитектура, инженерия больших данных. data pipeline, Kafka, Spark, Hadoop, NiFi
Типовая схема конвейера обработки больших данных на открытых Big Data технологиях

Как обычно, в Apache NiFi подобный data pipeline реализуется в графическом виде через создание и конфигурирование процессоров обработки потоковых данных (Flow File Processor), а также соединений (Connection), которые отвечают за определение того, как потоковый файл (FlowFile) передается между процессорами.

NiFi
Веб-GUI Apache NiFi

Обогащение данных и еще пара плюсов Apache NiFi

В этот типовой конвейер обработки Big Data можно также внести этап обогащения данных, которое представляет собой получение данных из внешнего источника (СУБД, файл, API и пр.) для добавления дополнительных деталей, контекста или других полезных сведений к загружаемой информации. Обычно при этом добавляемые данные содержат не фактическую информацию, а ссылки, например, идентификаторы, для обращения к другим источникам данных через запрос определенного атрибута нужного объекта. Часто обогащение выполняется в пакетном режиме с помощью операции соединения (JOIN). Потоковый режим обогащения данных Apache NiFi поддерживает с версии 1.3 через процессоры LookupAttribute и LookupRecord, а также специальные сервисы поиска, такие как Simple Key Value Lookup Service или MongoDB Lookup Service [3].

Примечательно, что Apache NiFi упрощает работу Big Data инженера не только благодаря наглядному веб-GUI, но и внутренней оптимизации взаимодействия с потоками данных. В частности, чтобы не превысить объем памяти JVM, который является типичным ограничением экосистемы Hadoop, когда данные проходят через NiFi, в качестве FlowFile передается указатель на данные. Доступ к содержимому потокового файла осуществляется только по необходимости. Это позволяет работать с полезными данными в потоковом режиме, не считывая большой трафик. Таким образом, экономится объем памяти JVM. Например, типичным шаблоном переноса данных в HDFS из NiFi является использование процессора MergeContent непосредственно перед процессором PutHDFS. MergeContent может взять много файлов малого или среднего размера и объединить их вместе, чтобы сформировать файл подходящего размера для HDFS. Процессор делает это путем копирования всех входных потоков из исходных файлов в новый выходной поток, объединяя большое количество файлов без превышения объема памяти JVM [4].

Это не единственный пример удобства использования Apache NiFi с точки зрения разработчика потоков данных (Data Flow). Еще один интересный кейс отмечает отечественная ИТ-компания Axmor, которая использует этот Big Data инструмент в качестве ETL-интерфейса, реализуя основную обработку данных с помощью Apache Spark. Дополнительным преимуществом NiFi Axmor считает наличие библиотеки Jolt для работы с полуструктурированными данными в формате JSON [5]. С помощью процессора JoltJsonTransform она позволяет преобразовать JSON-файл к нужной структуре [6], а также дает возможность посмотреть параметры блока входных данных и выходных данных сразу на одном экране, что очень удобно. В частности, Axmor забирает нужные данные с помощью SQL-запроса с удаленного сервера и преобразует их в JSON, добавляя в него служебную информацию с помощью Jolt. Полученные данные в нужной схеме записываются в корпоративную СУБД MongoDB [5].

Jolt, NiFi, Json Transform Big Data
Пример использования Apache NiFi для сбора и преобразования JSON-файлов

В следующей статье мы подробнее рассмотрим, как Apache NiFi позволяет использовать SQL-запросы для фильтрации определенных столбцов, строк или полей, их переименования, вычислений, агрегаций и маршрутизации потоковых данных. А научиться эффективно администрировать и использовать Apache NiFi, Spark и Kafka для потоковой аналитики больших данных в проектах цифровизации своего бизнеса, а также государственных и муниципальных предприятий, вы сможете на специализированных курсах в нашем лицензированном учебном центре обучения и повышения квалификации для разработчиков, менеджеров, архитекторов, инженеров, администраторов, Data Scientist’ов и аналитиков Big Data в Москве:

 

Источники

  1. https://community.cloudera.com/t5/Community-Articles/Real-Time-Stock-Processing-With-Apache-NiFi-and-Apache-Kafka/ta-p/249221
  2. https://ru.bmstu.wiki/Apache_Druid
  3. https://community.cloudera.com/t5/Community-Articles/Data-flow-enrichment-with-NiFi-part-1-LookupRecord-processor/ta-p/246940
  4. https://cwiki.apache.org/confluence/display/NIFI/FAQs
  5. https://axmor.ru/articles/kak-primieniat-apache-nifi-v-bi-proiektakh/
  6. http://ijokarumawak.github.io/nifi/2016/11/22/nifi-jolt/