Привет, Хабр! Мы — команда мониторинга и анализа данных биотехнологической компании BIOCAD. Хотим рассказать вам о том, как мы собираем данные для аналитики практически со всех сервисов компании и при этом вполне успешно обходимся без полноценного дата-инженера.
Пост будет интересен как тем, кто только ищет решение для ETL, так и тем, кто уже работает с 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.
Разные версии инструмента имеют различия, связанные с работой процессоров, Служба контроллера и их атрибуты.
В этом материале мы не будем рассказывать о базовом функционале Apache NiFi, поэтому если вы не знакомы с инструментом, рекомендуем изучить другие.
материалы на эту тему.
Получить данные из MySQL
Одним из наиболее распространенных источников данных являются различные реляционные базы данных.Для извлечения из них информации с помощью Apache NiFi понадобится всего два процессора: СоздатьFlowFile И Выполнить SQL .
Первый процессор используется для запуска всей цепочки.
Он генерирует FlowFile, который подается на вход следующего процессора и действует как «триггер».
GenerateFlowFile может запускаться по требованию или по расписанию, заданному выражением Cron. У нас это происходит ночью, чтобы не мешать работе наших сервисов днем.
Например, на скриншоте ниже вы можете видеть, что запуск задачи запланирован на 02:50. Мы учитываем специфику базы данных, из которой будут загружаться данные.
Такой подход позволяет равномерно распределить нагрузку и поддерживать стабильную работу всех задействованных систем.
Каждый FlowFile содержит данные (контент) и метаданные (атрибуты), то есть полезную нагрузку для последующих процессоров.
Полезная нагрузка FlowFile может представлять собой необходимую нам информацию.
Для нашего случая мы передадим в содержимом FlowFile SQL-скрипт, с помощью которого следующий процессор запросит необходимые данные из базы данных.
Для этого мы используем поле Пользовательскийтекст во вкладке «Свойства» в окне настроек процессора СоздатьFlowFile .SELECT id, title, code, status, result FROM lims_test_active;
Если данных для ежедневной перезаписи слишком много, следует организовать инкрементный сбор (хорошо для различных логов, событий, показаний датчиков и т. д.).
Тогда вам не придется каждый раз собирать все данные заново, а «вспомнить» можно только самые последние — например, те, что появились после определенной даты или отсортированы по последнему ключу.
Второй процессор - Выполнить SQL — выполняет отправленный на него запрос и возвращает полученные данные в формате Avro (формат хранения файлов, используемый во многих продуктах Apache).
Стоит отметить, что вместо Выполнить SQL ты можешь использовать процессор ВыполнитьSQLRecord .
В зависимости от выбранного Служба контроллера как ЗаписьПисатель он может обслуживать FlowFile с содержимым в форматах Avro, JSON, CSV и XML, но его настройка будет немного сложнее.
К процессору ВыполнитьSQL понял куда ему следует отправить запрос, нужно настроить специальный Служба контроллера для подключения к базе данных.
В настройках (поле «Совместимые службы контроллера») выберите Служба пула подключений к базе данных .
Он управляет открытыми подключениями к базе данных, создает новые и закрывает старые.
В свойствах Служба контроллера укажите URL-адрес целевой базы данных ( URL-адрес подключения ), имя класса драйвера ( Имя класса драйвера базы данных ) и путь к драйверу в файловой системе ( Расположение драйвера базы данных ).
Поймите, что писать в поле Имя класса , вы можете различные инструкции В сети.
В нашем случае мы указали Имя класса для драйвера JDBC - com.mysql.jdbc.Driver — и зарегистрировал свое местоположение на сервере NiFi. Этот драйвер позволяет выполнять SQL-запросы к базе данных и зависит от ее типа, поэтому предварительно его необходимо скачать с официального сайта разработчиков [вот ссылка для MySQL , и здесь - для PSQL ].
Далее останется только выбрать настроенный сервис в свойствах процессора и заполнить остальные обязательные (выделены жирным шрифтом) атрибуты.
Далее объединим процессоры, указав тип связи с помощью отношения успех или отказ .
Так процессор поймет, куда отправить FlowFile с результатами работы или ошибкой.
Теперь остается только запустить цепочку, и если все сделано правильно, то красные квадраты на схеме заменятся зелеными треугольниками.
В результате мы сформировали цепочку из двух процессоров, которые получают всю таблицу из внешней базы данных MySQL. Остается только записать эти данные в новую базу данных для дальнейшей обработки и использования.
Запись данных в PSQL
Теперь, когда у нас есть собранные данные в формате Avro, давайте запишем их в нашу базу данных PostgreSQL. Для начала создадим таблицу: CREATE TABLE lims_test_active (
Теги: #Большие данные #данные #Инженерия данных #Apache #анализ данных #nifi #biocad
-
Более Быстрый Компьютер: Другие Советы
19 Oct, 24 -
Официальное Зеркало Ubuntu
19 Oct, 24 -
Радио-Э №18
19 Oct, 24 -
Безопасные Игры
19 Oct, 24 -
Конференция Dump-2017: Секция «Тестирование»
19 Oct, 24 -
Будет Ли Время Для Смс-Спама?
19 Oct, 24