Głównie specjalizuję się w budowaniu procesów ETL odpowiedzialnych za integracje różnych źródeł danych za pomocą Apache NiFi.
  • Budowa prostego i automatycznego przepływu danych

Instalacja i konfiguracja środowiska Apache NiFi

Poniższy poradnik zawiera szczegółowy opis kroków jakie trzeba wykonać, aby poprawnie zainstalować i uruchomić środowisko Apache NiFi w wersji 1.15.3. W tym celu został użyty darmowy system Rocky Linux w wersji 8.5, który jest klonem popularnej dystrybucji Red Hat Enterprise Linux. Podczas, gdy Red Hat poinformował o końcu CentOS Linux, założyciel wspomnianej dystrybucji Gregory Kurtzer ogłosił powstanie nowej darmowej wersji RHEL, która zastąpi CentOS, czyli Rocky Linux.

Jego nazwa jest hołdem dla wczesnego współzałożyciela CentOS-a, Rocky’ego McGaugha

https://rockylinux.org/pl/about/

Aktualizacja systemu

Przechodząc do instalacji i konfiguracji Apache NiFi, w pierwszej kolejności wymagane jest zaktualizowanie systemu operacyjnego, dlatego należy uruchomić następujące polecenia, które uaktualnią dystrybucję, a następnie uruchomią ponownie.

sudo dnf update -y && sudo shutdown -r now

Warto również zainstalować dodatkowe pakiety, które wykorzystane zostały w tym artykule.

sudo dnf install nano wget

Konfiguracja systemu

Gdy już mamy aktualny system oraz repozytoria należy przejść do kolejnego kroku, który zawiera dobre praktyki, aby uzyskać najlepsze rezultaty w kwestii wydajności środowiska. Jest to krok opcjonalny, ale osobiście zalecam wykonanie tych czynności, ponieważ aplikacja jaką jest NiFi intensywnie korzysta z IO maszyny, a przedstawiona niżej konfiguracja pozwoli na jego prawidłową pracę. Poniższa konfiguracja została zaczerpnięta z oficjalnej dokumentacji NiFi.

Selinux

Wyłączymy selinux, aby nie stwarzał problemów aplikacji NiFi, w tym celu należy w 6 linijce zmienić wartość enforcing na disabled.

sudo nano /etc/sysconfig/selinux
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
SELINUX=disabled
# SELINUXTYPE= can take one of these three values:
#     targeted - Targeted processes are protected,
#     minimum - Modification of targeted policy. Only selected processes are protected.
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted

File Handles & Forked Processes

Zwiększenie wydajności środowiska możemy zacząć od zwiększenia ilości limitów systemowych, w tym celu należy dokonać edycji pliku systemowego i wkleić na koniec pliku wskazane niższej parametry.

sudo nano /etc/security/limits.conf
*  hard  nofile  50000
*  soft  nofile  50000
*  hard  nproc   10000
*  soft  nproc   10000

TCP socket ports & TIMED_WAIT

Zaleca się ustawienie poniższy parametrów poprzez wydanie poleceń w powłoce BASH, w celu optymalizacji ustawień sieciowych.

sudo sysctl -w net.ipv4.ip_local_port_range="10000 65000"
sudo sysctl -w net.ipv4.netfilter.ip_conntrack_tcp_timeout_time_wait="1"

SWAP

Dla aplikacji jaką jest NiFi nie jest wskazane używanie pamięci SWAP, więc należy edytować plik /etc/sysctl.conf i dodać poniższy parametr na koniec pliku.

sudo nano /etc/sysctl.conf
vm.swappiness = 0

Partition atime

Polecam nie wykorzystywać partycji systemowej na instalację NiFi, a utworzyć dedykowaną partycję z parametrem noatime, który znacząco podnosi wydajność i przepustowość, w tym celu należy edytować plik /etc/fstab. Zamieszczam krótki przewodnik, w jaki sposób dodałem volume group i physical volume z użyciem dysku /dev/sdb.

sudo pvcreate /dev/sdb
sudo vgcreate datavg /dev/sdb
sudo lvcreate -l +100%FREE -n datalv datavg
sudo mkfs.xfs /dev/datavg/datalv
sudo mkdir /data

Kolejnym krokiem jest zamontowanie udziału w wyznaczony punkt montowania z parametrem noatime.

sudo nano /etc/fstab
/dev/datavg/datalv      /data        xfs     defaults,noatime        1 1
sudo mount -a

Końcowy efekt powinien wyglądać następująco.

linux filesystem
Wynik poleceń “df -h” oraz “lsblk”

W ostatnim kroku, aby wprowadzone zmiany zostały użyte należy zrestartować maszynę.

sudo shutdown -r now

Instalacja pakietu Java

Apache NiFi do działania wymaga pakietu Java w wersji 8 lub 11. Do Twojego wyboru pozostawiam, z której wersji skorzystasz, poniżej zamieszczam polecenia, które należy użyć, aby zainstalować wybraną wersję w systemie Rocky Linux.

Java OpenJDK 8
sudo dnf install java-1.8.0-openjdk java-1.8.0-openjdk-devel
Java OpenJDK 11
sudo dnf install java-11-openjdk java-11-openjdk-devel

Instalacja Apache NiFi

W chwili obecnej zainstaluje najnowszą wersję, czyli Apache NiFi 1.15.3. Natomiast, jeżeli interesuje Ciebie inna wersja to należy wejść poprzez ten link https://nifi.apache.org/download.html, wybrać wersję i pobrać pliki binarne z rozszerzeniem tar.gz. Poleceniem wget pobieramy pliki instalacyjne NiFi, a następnie rozpakowujemy.

sudo cd /data
sudo wget https://archive.apache.org/dist/nifi/1.15.3/nifi-1.15.3-bin.tar.gz
sudo tar vzxf nifi-1.15.3-bin.tar.gz
sudo ln -s /data/nifi-1.15.3 /data/nifi
sudo cd nifi

Po wykonaniu wszystkich powyższych czynności, musimy utworzyć użytkownika oraz hasło jakim będziemy logować się do NiFi.

sudo ./bin/nifi.sh set-single-user-credentials <username> <password>

Domyślna konfiguracja NiFi jest przypisana do adresu lokalnego więc, aby uzyskać dostęp do GUI musimy zmienić ustawienie nifi.web.https.host z 127.0.0.1 na 0.0.0.0 w pliku nifi.properties

sudo nano conf/nifi.properties
nifi.web.https.host=<adres_ip_hosta>

Następnie należy zainstalować service, który pozwoli nam poprzez komendę systemctl uruchomić NiFi.

sudo bin/nifi.sh install

Zalecam stworzyć dodatkową konfigurację do usługi nadpisującą jej limity, w tym celu należy wykonać poniższe polecenia i wkleić zawartość [Service] do pliku override.conf.

sudo mkdir -p /etc/systemd/system/nifi.service.d
sudo nano /etc/systemd/system/nifi.service.d/override.conf
[Service]
LimitNOFILE=50000
LimitNPROC=10000

W ostatnim kroku należy zaktualizować daemon oraz uruchomić NiFi, ostatnie polecenie spowoduje, że NiFi będzie uruchamiany wraz z uruchomieniem maszyny.

sudo systemctl daemon-reload
sudo systemctl start nifi
sudo systemctl enable nifi

W przeglądarce wpisując adres https://adres_ip_maszyny:8443/nifi zostanie załadowany interfejs graficzny Apache NiFi z prośbą o zalogowanie się poświadczeniami, które wcześniej ustawiliśmy.

nifi webui
Logowanie do Apache NiFi
Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *