Что такое Apache NiFi
Apache NiFi - это визуальная среда разработки, предназначенная для передачи и обработки данных.
Название NiFi происходит от «Niagara Files». Проект в течение восьми лет разрабатывался агентством национальной безопасности США, а в ноябре 2014 года его исходный код был открыт и передан Apache Software Foundation в рамках программы по передаче технологий (NSA Technology Transfer Program).
NiFi — мощный инструмент, который умеет работать с большим количеством источников данных. Вы можете получать данные из Интернета по HTTP (есть даже отдельный модуль для работы с Твиттером) или FTP, можно читать данные из локальных и даже распределенных (HDFS) каталогов или баз данных. Полученные данные можно обрабатывать, модифицировать, есть даже свой встроенный язык (Expression Language). Затем данные можно сохранить либо в файл, либо распределенное хранилище, либо базу данных. Особенно радует поддержка большого числа различных технологий и протоколов передачи и хранения данных: HDFS, Hive, HBase, Solr, Cassandra, MongoDB, ElastcSearch, Kafka, RabbitMQ, HTTPS, SFTP и другие.
Так же важной особенностью NiFi является кросплатформенность, он одинаково удобно устанавливается и работает в Windows и Linux системах.
Установка и настройка Apache NiFi.
Установка NiFi предельно проста. Сначала качаем нужную версию с официального сайта, на данный момент это файл nifi-1.11.4-bin.tar.gz. У меня уже установлена версия 1.9.0, поэтому далее в статье я буду оперировать командами под эту версию. Архив большой (1.2 ГБ), поэтому придется подождать.
После успешной загрузки файла его необходимо распаковать в необходимую директорию, у меня это /usr/local. На этом установка завершена, следует отметить, что для Windows абсолютно такая же последовательность действий, только качать удобнее архив zip.
Для работы в NiFi применяется web-интерфейс, доступный по адресу: http://Адрес_сервера:8080/nifi
Адрес_сервера - это на локальном компьютере localhost, на удаленном - IP или DNS-адрес удаленной машины.
8080 - порт, настроен по умолчанию.
У меня уже этот порт занят, поэтому изменим его. Для этого нужно войти в каталог conf в установочной директории NiFi:
cd /usr/local/nifi-1.9.0/conf
И отредактировать файл nifi.properties
sudo gedit nifi.properties
Далее в редакторе найти строку nifi.web.http.port и присвоить необходимое значение, у меня 1111.
Теперь все готово к запуску. В Linux это делается командой:
sudo /usr/local/nifi-1.9.0/bin/nifi.sh start
Для Windows в каталоге bin запустить двойным щелчком run-nifi.bat/
Запускается NiFi долго, несколько минут. Для работы необходимо запустить браузер, и набрать в адресной строке строку, указанную выше. Для моего примера так: http://Адрес_сервера:1111/nifi
Если все успешно прошло, вы увидите рабочую область, все готово к работе, но об этом поговорим далее.
Стоит отметить, браузер должен поддерживать HTML5.
Начало работы с Apache NiFi (NiFi Flow, Process Group, Processors).
После запуска NiFi в браузере будет отображено рабочее поле и элементы управления, смотрим скриншот.
Не буду расписывать назначение модулей, сразу приступим к практике. Каждый проект объединяется с помощью модуля Process Group. Основные функциональные модули - Processors.
NiFi поддерживает Drug and Drop, поэтому возьмем модуль Process Group и перетащим его в рабочую область, смотрим скриншоты.
Введем имя для группы процессоров, у меня MyTest. Вот что имеем:
По правому клику мышью открывается окно управления и свойств. Двойной клик мыши позволяет войти в рабочую область низшего уровня, что отображается в Навигации по проектам, смотрим скриншот.
Уровней вложенности может быть достаточно много, но обычно хватает одного или двух.
Теперь давайте приступим к задаче копирования фалов из каталога в каталог, задача простая, но позволит понять основные принципы NiFi.
Сначала создадим на машине, где установлен NiFi (пример для ОС Linux), два каталога /usr/local/temp и /usr/local/temp1.
Теперь в модулях NiFi выберем Processor и перетащим его в рабочую область.
В результате появится окно выбора процессора, найдем нужный (GetFile), двойным кликом или кнопкой Add добавим его:
Процессор GetFile выполняет простую задачу: читает файл из указанной директории, преобразует его в формат FlowFile и отправляет следующему процессору.
Для настройки процессора необходимо открыть окно конфигурации (двойной клик по процессору, или клик правой кнопкой и выбрать Configure, см скриншот.).
В открывшемся окне выбрать вкладку PROPERTIES и указать (двойной клик по значению свойства) нужное нам свойство - входной каталог (Input Directory, у нас /usr/local/temp), как на скриншоте.
Настроенный процессор будет читать все файлы (свойство FileFilter) из указанного каталога, удалять их (свойство Keep Source File) и в формате FlowFile (если файл успешно считался) отправлять на выход процессора Succes (вкладка настроек SETTINGS).
Для примера возьмем модуль Output Port и направим на него поток Succes от процессора GetFile. Смотрим серию скриншотов ниже:
Для соединения выхода процессора с портом или с другим процессором необходимо навести указатель мыши на центр процессора, появится стрелка, которую нужно перетащить к модулю назначения. Имя порта в примере OUT.
После соединения модулей появится окно настроек потока.
Таким образом мы создали выходной поток для группу процессоров MyTest. Через навигацию по проектам поднимемся выше, где находится модуль MyTest и разместим там процессор PutFile.
Процессор PutFile производит запись файла из потока в директорию, указанную в настройках процессора (директория должна существовать в системе).
Осталось соединить выходной порт процессора MyTest (OUT) с процессором PutFile.
Вроде все готово, но в процессоре PutFile мы видим предупреждение, при наведении указателя мыши на него, открывается описание, которое гласит, что делать с потоком в случае успешной и неуспешной операции записи файла.
Откроем конфигурацию процессора, вкладка Settings и включим опцию уничтожать поток в случае успешной операции.
В случае ошибки обычно поток возвращают обратно в процессор.
Теперь нам можно приступать к запуску нашего проекта. Для запуска всех процессоров в группе процессоров необходимо кликнуть правой кнопкой мыши по группе и выбрать Start, либо выбрать нужный процессор левой кнопкой мыши и запустить его через панель управления проектами слева. Смотрим скриншот и разбираемся.
В результате все содержимое внутри группы процессоров будет запущено, в панели состояния процессоров появится зеленый треугольник. Отдельно запустите процессор PutFile.
Проект запущен, теперь создайте или скопируйте файл в каталог /usr/local/temp. Данный файл будет автоматически скопирован в каталог /usr/local/temp1 и удален.
Вот мы и создали первый проект в NiFi, но возможности данного средства очень широки, и позволяют копировать файлы в HDFS, топики Kafka, удаленные серверы TCP, HTTP, FTP.
Комментировать могуть только зарегистрированные пользователи