Партнерка на США и Канаду по недвижимости, выплаты в крипто

  • 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