Сегодня на тематических зарубежных сайтах о больших данных можно встретить упоминание о таком относительно новом инструменте для экосистемы Hadoop, как Apache NiFi. Это современный инструмент ETL с открытым исходным кодом.
Распределенная архитектура для быстрой параллельной загрузки и обработки данных, большое количество плагинов для источников и преобразований, версионирование конфигураций — это лишь часть его преимуществ.
Несмотря на всю свою мощь, 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.
Веб-интерфейс управления NiFi
Ниже я покажу несколько примеров DataFlow для выполнения некоторых распространенных операций.
Пример загрузки файлов с SFTP-сервера в HDFS
В этом примере процессор ListSFTP выводит список файлов на удаленном сервере.
Результат этого листинга используется для параллельной загрузки файлов всеми узлами кластера с помощью процессора FetchSFTP. После этого к каждому файлу добавляются атрибуты, полученные путем разбора его имени, которые затем используются процессором PutHDFS при записи файла в конечный каталог.
Пример загрузки данных через системный журнал в Kafka и HDFS
Здесь с помощью процессора ListenSyslog мы получаем входной поток сообщений.
После этого в каждую группу сообщений добавляются атрибуты о времени их поступления в NiFi и названии схемы в Avro Schema Registry. Далее первая ветвь отправляется на вход в процессор «QueryRecord», который на основе заданной схемы считывает данные и анализирует их с помощью SQL, а затем отправляет в Kafka. Вторая ветвь отправляется процессору MergeContent, который агрегирует данные в течение 10 минут, после чего передает их следующему процессору для конвертации в формат Parquet и записи в HDFS.
Вот пример того, как еще можно спроектировать DataFlow:
Загрузка данных через системный журнал в Kafka и HDFS. Очистка данных в Hive
Теперь о преобразовании данных.
NiFi позволяет анализировать данные в обычном формате, запускать на них SQL, фильтровать и добавлять поля, а также преобразовывать один формат данных в другой.
Он также имеет собственный язык выражений, богатый различными операторами и встроенными функциями.
С его помощью можно добавлять к данным переменные и атрибуты, сравнивать и вычислять значения, а затем использовать их при формировании различных параметров, например пути для записи в HDFS или SQL-запроса в Hive. Вы можете прочитать больше здесь .
Пример использования переменных и функций в процессоре UpdateAttribute
Пользователь может отслеживать полный путь данных и наблюдать изменения в их содержании и атрибутах.
Визуализация цепочки DataFlow
Просмотр содержимого и атрибутов данных
Есть отдельный сервис для версионирования DataFlow. Реестр НиФи .
Настроив его, вы получаете возможность управлять изменениями.
Вы можете внести локальные изменения, выполнить откат или загрузить любую предыдущую версию.
Меню контроля версий
В NiFi можно контролировать доступ к веб-интерфейсу и разделение прав пользователей.
В настоящее время поддерживаются следующие механизмы аутентификации:
- На основании сертификатов
- Имя пользователя и пароль на основе LDAP и Kerberos.
- Через Апач Нокс
- Через OpenID Connect
Для авторизации пользователей в системе используются FileUserGroupProvider и LdapUserGroupProvider. Вы можете прочитать об этом больше Здесь .
Как я уже говорил, NiFi может работать в кластерном режиме.
Это обеспечивает отказоустойчивость и дает возможность масштабировать нагрузку по горизонтали.
Статически фиксированного главного узла не существует. Вместо этого Смотритель зоопарка Апачей выбирает один узел в качестве координатора и один в качестве основного.
Координатор получает информацию об их состоянии от других узлов и отвечает за их подключение и отключение от кластера.
Первичный узел используется для запуска изолированных процессоров, которые не следует запускать на всех узлах одновременно.
Работающий NiFi в кластере
Распределение нагрузки между узлами кластера на примере процессора PutHDFS
Краткое описание архитектуры и компонентов 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.
Дополнительная информация о НиФи
- Официальный страница проектная документация
- Встреча интересные статьи о NiFi от одного из участников проекта
- Блог о NiFi один из разработчиков
- Статьи на портале Hortonworks
Спасибо всем за внимание.
Пишите в комментариях, если у вас есть вопросы.
Я буду рад на них ответить.
Теги: #Хранение данных #Большие данные #Hadoop #Apache #etl #управление данными в Ростелекоме
-
Многоцелевой Планшет Android
19 Oct, 24 -
Дифференциальные Уравнения
19 Oct, 24 -
Отмена Летнего Времени Для Серверов Exchange
19 Oct, 24 -
Революция В Книгоиздании От Google
19 Oct, 24