Партнерка на США и Канаду по недвижимости, выплаты в крипто
- 30% recurring commission
- Выплаты в USDT
- Вывод каждую неделю
- Комиссия до 5 лет за каждого referral

Рис. 7. Кластер Apache NiFi на различных устройствах
На этой системе был запущен процесс потоковой обработки данных по обнаружению лиц с видеокамеры, который подтвердил работоспособность подобной схемы взаимодействия граничных устройств [40][41].
3.3. Рекомендации запуска NiFi на Raspberry Pi
Условно, рекомендации можно разделить на две основные категории [42]:
- Конфигурация Raspberry Pi - ОС, системные настройки для постоянной работы экземпляра NiFi; Конфигурация NiFi - настройки и изменения в самом NiFi.
Конфигурация Raspberry Pi
Отключить запись времени доступа.
Чтобы отключить запись времени изменения файлов и каталогов, для минимизации ненужных записей на SD-карту:
sudo vi /etc/fstab
# добавить в mount ‘noatime, nodiratime’
# сохранить изменения
sudo mount - o remount /
Отключить энергосбережение WiFi
sudo iw dev wlan0 set power_save off
Создать отдельного пользователя и задать лимиты, следуя рекомендациям [31].
sudo useradd - m - d /mnt/flash1/nifi nifi
sudo chmod 750 /mnt/flash1/nifi
nifi hard nofile 50000
nifi soft nofile 50000
nifi hard nproc 10000
nifi soft nproc 10000
Конфигурация Apache NiFi
Прежде всего, важно удалить файлы, в которых нет необходимости на Raspberry Pi. Нужно удалить ненужные файлы в каталоге $NIFI_HOME/lib, это значительно улучшит время запуска и уменьшит нагрузку на систему.
Необходимо внести несколько изменений в файл $NIFI_HOME/conf/logback. xml:
по-умолчанию логировать только ошибки
<root level="ERROR">
<appender-ref ref="APP_FILE"/>
</root>
для основных библиотек NiFi логировать предупреждения и выше
<logger name="org. apache. nifi" level="WARN"/>
Настроить ротацию и сжимание файлов логирования nifi-app. log
<fileNamePattern>./logs/nifi-app_%d{yyyy-MM-dd_HH}.%i. log. gz</fileNamePattern>
Это всего лишь некоторые советы, которые желательно применить для работы NiFi на Raspberry Pi, с целью улучшения производительности. Конечно, для оптимизации работы Apache NiFi на подобных устройствах существуют и другие настройки, которые можно детальнее изучить на официальных сайтах [31][42].
4. ДИНАМИЧЕСКОЕ ФОРМИРОВАНИЕ КЛАСТЕРА APACHE NIFI
Была поставлена задача реализовать функционал обнаружения и подключения устройств к кластеру Apache NiFi. Для подключения к кластеру рассматривались два варианта развития:
Централизованный - новое устройство обращается к определенному централизованному координатору, который сообщает ему текущую конфигурацию кластера, включая адреса всех подключенных устройств. После этого новое устройство может подключиться к кластеру. Распределенный - новое устройство, подключившись к сети, сканирует сеть на наличие устройств с открытым конкретным портом (например, 9000). Это бы означало, что на устройстве может быть запущен Apache NiFi. Зная адреса других устройств, новое устройство может подключиться к кластеру.Для децентрализации кластера был выбран второй вариант. Для этих целей необходимо было рассмотреть различные варианты сканирования локальной сети.
4.1. Обнаружение устройств в локальной сети
Для формирования кластера или подключение к существующему, необходимо провести поиск подходящих устройств в выбранной сети. Для обнаружение устройств в локальной сети могут быть использоваться различные утилиты. Рассмотрим некоторые из них:
NMAP
Nmap («Network Mapper») это утилита с открытым исходным кодом для исследования сети и проверки безопасности. Она была разработана для быстрого сканирования больших сетей, хотя прекрасно справляется и с единичными целями. Nmap использует сырые IP пакеты оригинальными способами, чтобы определить какие хосты доступны в сети, какие службы (название приложения и версию) они предлагают, какие операционные системы (и версии ОС) они используют, какие типы пакетных фильтров/брандмауэров используются и еще дюжины других характеристик [46].
Пример команды для сканирования локальной сети:
nmap - sP 10.102.0.0/24
Опция - sP указывает Nmap произвести пинг сканирование (определение хостов), а затем вывести список доступных хостов, т. е. тех, которые ответили на запросы. Пример результата работы nmap:
Nmap scan report for 10.102.0.216
Host is up (0.000036s latency).
Nmap scan report for 10.102.0.219
Host is up (0.00079s latency).
Nmap done: 256 IP addresses (28 hosts up) scanned in 2.02 seconds
Протокол определения адреса ARP, ARP Scan
ARP Scan - это очень быстрый инструмент для сканирования локальной сети Linux с помощью ARP [45]. Утилита показывает все IPv4 адреса устройств в текущей сети. Поскольку ARP не использует маршрутизацию, то такой вид сканирования работает только в локальной сети. ARP Scan позволяет находить активные компьютеры как в проводных сетях ethernet, так и в беспроводных Wifi сетях.
Пример запуска:
sudo arp-scan --localnet
Пример результата работы arp-scan:
10.102.0.215 c1:56:d3:6c:94:17 (Unknown)
10.102.0.218 12:ad:11:be:87:cf (Unknown)
10.102.0.219 c0:b6:e3:6c:94:dc (Unknown)
47 packets received by filter, 0 packets dropped by kernel
Ending arp-scan 1.8.1: 256 hosts scanned in 1.280 seconds (200.00 hosts/sec). 46 responded
Программные решения
Самая простая реализация обнаружения устройств в локальной сети, это перебор всех IP в цикле с проверкой нужного порта на соединение. Однако это долгий процесс, учитывая необходимости отдельной проверки каждого IP адреса в сети. Другой способ заключается в использование датаграммного сокета и передачу сообщения нескольким получателям, что ускоряет процесс поиска необходимых устройств [47].
Датаграммный сокет — это сокет, предназначенный для передачи данных в виде отдельных сообщений (датаграмм). Датаграммный сокет допускает передачу сообщения нескольким получателям (multicasting) и широковещательную передачу (broadcasting).
Для посылки датаграмм отправитель и получатель создают сокеты датаграмм типа. В Java их представляет класс DatagramSocket. В классе три конструктора [47]:
- DatagramSocket () — создаваемый сокет присоединяется к любому свободному порту на локальной машине; DatagramSocket (int port) — создаваемый сокет присоединяется к порту port на локальной машине; DatagramSocket(int port, InetAddress addr) — создаваемый сокет присоединяется к порту port; аргумент addr — один из адресов локальной машины.
Класс содержит множество методов доступа к параметрам сокета и методы отправки и приема датаграмм:
- send(DatagramPacket pack) — отправляет датаграмм, упакованную в пакет pack; receive (DatagramPacket pack) — дожидается получения датаграмм и заносит ее в пакет pack.
При обмене датаграмм соединение обычно не устанавливается, они посылаются наудачу, в расчете на то, что получатель ожидает их.
4.2. Выбор способа поиска устройств
Такие утилиты как nmap, arp-scan показали свою высокую эффективность по скорости поиска устройств в локальной сети. Однако их необходимо дополнительно устанавливать на каждом из устройств, а arp-scan запускается только через sudo, решено было их не использовать на данном этапе работы.
В связи с тем что, для проверки наших гипотез, нам было достаточно обычного сканирования устройств в локальной сети, с последующей попыткой подключения или создания кластера, на данном этапе работы было решено использовать обычный перебор всех IP в цикле и проверка указанного сокета на возможность подключения.
Следующим этапом может быть переход на датаграммные пакеты с мультикастовой передачей данных, для ускорения процесса поиска устройств в выбранной сети.
4.3. Возможности Apache Zookeeper для создание кластера
Встроенные возможности Apache NiFi не позволяют создание динамического кластера с нуля, для этого нужно проделать ряд ручных процедур по настройке каждого из узлов (описанные в главе 2.2 данной работы). В связи с тем, что для кластеризации NiFi использует Apache Zookeeper, то необходимо изучить его возможности по создания кластера [31].
Начиная с версии Apache Zookeeper 3.5.0 поддерживает динамическую конфигурацию, до этого членство и все другие параметры конфигурации Zookeeper загружались статически во время загрузки и их нельзя было изменять во время выполнения. Приходилось перезапускать вручную, что могло приводить к различным ошибкам [43]. Тем не менее, на текущий момент данная версия находится в стадии бета и не поставляется вместе с Apache NiFi.
Рассмотрим несколько других инструментов для работы с кластером Zookeeper:
ZooKeeper Migrator
NiFi ZooKeeper Migrator может быть использован для выполнения следующих задач [31]:
- Перемещение информации ZooKeeper из одного кластера ZooKeeper в другой Миграция со встроенного ZooKeeper в NiFi во внешний ZooKeeper Миграция с внешнего ZooKeeper на встроенный ZooKeeper в NiFi 1.x и других.
Soabase Exhibitor
Exhibitor - это Java супервайзер для ZooKeeper. Он предоставляет ряд функций [44]:
- Наблюдает за узлом ZooKeeper и проверят, что он работает Выполняет периодическое резервное копирование Выполнять периодическую очистку логов ZooKeeper Имеет пользовательский интерфейс для просмотра узлов ZooKeeper кластера. Широкие возможности API REST

Рис 8. Пользовательский интерфейс Exhibitor
ZooKeeper Migrator и Soabase Exhibitor отлично подходят для решения определенного круга задач по управлению кластером [31]. Однако нужного функционала для динамического создания кластера с нуля отсутствуют.
В связи с этим решено написать приложение агент, который бы выполнял роль начальной загрузки Apache NiFi с целью его динамической настройки для создания кластера или подключения к существующему.
4.3. Программа для обнаружение и подключение устройств к кластеру
В случае если в локальной сети уже есть кластер NiFi, то необходимо будет подключиться к существующему кластеру (рис. 8). Если же кластер не найден, будет выполняться попытка динамическое создание кластера Apache NiFi (рис. 9).
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 |


