Как Мы Собираем Данные Для Аналитики С Помощью Apache Nifi

Привет, Хабр! Мы — команда мониторинга и анализа данных биотехнологической компании BIOCAD. Хотим рассказать вам о том, как мы собираем данные для аналитики практически со всех сервисов компании и при этом вполне успешно обходимся без полноценного дата-инженера.

Пост будет интересен как тем, кто только ищет решение для ETL, так и тем, кто уже работает с NiFi или другими подобными инструментами и хочет познакомиться с разработками, идеями и опытом других команд.

Как мы собираем данные для аналитики с помощью Apache NiFi



О команде

Мы, наверное, похожи на стандартную команду аналитиков данных (BI+DS) в ИТ-отделе производственной компании.

Мы работаем в Jira, делаем прототипы вместе с заказчиком в Miro, ведем базу знаний в Confluence, используем Python и SQL для решения повседневных задач и предоставляем итоговую отчетность клиентам в Power BI. Исторически мы сами общаемся с заказчиком, составляем техническое задание, готовим данные, разрабатываем модели, внедряем ML в производство и, конечно же, строим дашборды (и не только).

Этот аспект (в сочетании с большим количеством направлений бизнеса) неизбежно приводит к нашему постоянному развитию в различных областях — со временем вы научитесь работать с данными промышленной SCADA, собирать данные из облака SalesForce, редактировать объекты через Jira API и намного больше.

В итоге это привело к тому, что мы самостоятельно построили аналитическое хранилище данных (PostgreSQL + MongoDB) для предоставления BI-отчётности, быстрой обработки различных специальных запросов и решения задач Data Science. Но у нас нет выделенного дата-инженера, и команда самостоятельно выстраивает пайплайны для сбора и обработки необходимых данных от 30+ различных сервисов.

У этого подхода есть свои плюсы и минусы, нам нравится, как о них написано в блоге.

Скайенг

О задачах

Четыре задачи, которые наиболее распространены в нашей практике и могут быть решены самостоятельно любым аналитиком данных с помощью NiFi:
  • Получить данные из MySQL (или любой другой реляционной базы данных);
  • Записать данные в PSQL;
  • Масштабировать цепочку сбора и записи данных;
  • Постепенно собирайте данные с оборудования с помощью REST API.
Мы используем NiFi версии 1.9 (1.9.0.1.0.0.0-90) — обратите внимание на это, если вы планируете использовать этот пост для настройки собственной инфраструктуры.

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

В этом материале мы не будем рассказывать о базовом функционале Apache NiFi, поэтому если вы не знакомы с инструментом, рекомендуем изучить другие.

материалы на эту тему.



Получить данные из MySQL

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

Для извлечения из них информации с помощью Apache NiFi понадобится всего два процессора: СоздатьFlowFile И Выполнить SQL .



Как мы собираем данные для аналитики с помощью Apache NiFi

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

Он генерирует FlowFile, который подается на вход следующего процессора и действует как «триггер».

GenerateFlowFile может запускаться по требованию или по расписанию, заданному выражением Cron. У нас это происходит ночью, чтобы не мешать работе наших сервисов днем.

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

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



Как мы собираем данные для аналитики с помощью Apache NiFi

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

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

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

  
   

SELECT id, title, code, status, result FROM lims_test_active;

Для этого мы используем поле Пользовательскийтекст во вкладке «Свойства» в окне настроек процессора СоздатьFlowFile .



Как мы собираем данные для аналитики с помощью Apache NiFi

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

Тогда вам не придется каждый раз собирать все данные заново, а «вспомнить» можно только самые последние — например, те, что появились после определенной даты или отсортированы по последнему ключу.

Второй процессор - Выполнить SQL — выполняет отправленный на него запрос и возвращает полученные данные в формате Avro (формат хранения файлов, используемый во многих продуктах Apache).

Стоит отметить, что вместо Выполнить SQL ты можешь использовать процессор ВыполнитьSQLRecord .

В зависимости от выбранного Служба контроллера как ЗаписьПисатель он может обслуживать FlowFile с содержимым в форматах Avro, JSON, CSV и XML, но его настройка будет немного сложнее.

К процессору ВыполнитьSQL понял куда ему следует отправить запрос, нужно настроить специальный Служба контроллера для подключения к базе данных.

В настройках (поле «Совместимые службы контроллера») выберите Служба пула подключений к базе данных .

Он управляет открытыми подключениями к базе данных, создает новые и закрывает старые.



Как мы собираем данные для аналитики с помощью Apache NiFi

В свойствах Служба контроллера укажите URL-адрес целевой базы данных ( URL-адрес подключения ), имя класса драйвера ( Имя класса драйвера базы данных ) и путь к драйверу в файловой системе ( Расположение драйвера базы данных ).

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

В нашем случае мы указали Имя класса для драйвера JDBC - com.mysql.jdbc.Driver — и зарегистрировал свое местоположение на сервере NiFi. Этот драйвер позволяет выполнять SQL-запросы к базе данных и зависит от ее типа, поэтому предварительно его необходимо скачать с официального сайта разработчиков [вот ссылка для MySQL , и здесь - для PSQL ].



Как мы собираем данные для аналитики с помощью Apache NiFi

Далее останется только выбрать настроенный сервис в свойствах процессора и заполнить остальные обязательные (выделены жирным шрифтом) атрибуты.



Как мы собираем данные для аналитики с помощью Apache NiFi

Далее объединим процессоры, указав тип связи с помощью отношения успех или отказ .

Так процессор поймет, куда отправить FlowFile с результатами работы или ошибкой.

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



Как мы собираем данные для аналитики с помощью Apache NiFi

В результате мы сформировали цепочку из двух процессоров, которые получают всю таблицу из внешней базы данных MySQL. Остается только записать эти данные в новую базу данных для дальнейшей обработки и использования.



Запись данных в PSQL

Теперь, когда у нас есть собранные данные в формате Avro, давайте запишем их в нашу базу данных PostgreSQL. Для начала создадим таблицу:

CREATE TABLE lims_test_active (

Теги: #Большие данные #данные #Инженерия данных #Apache #анализ данных #nifi #biocad
Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.