Samouczek Apache Flume: Co to jest, Architecture i przykład Hadoopa
⚡ Inteligentne podsumowanie
Apache Flume to rozproszona usługa służąca do zbierania, agregowania i przesyłania dużych ilości danych dziennika do systemu HDFS, zbudowana na agentach, które łączą w łańcuch źródło, kanał i odbiornik.
Co to jest Apache Flume w Hadoop?
Apache Flume to niezawodny i rozproszony system do gromadzenia, agregowania i przesyłania ogromnych ilości danych logów. Posiada prostą, a zarazem elastyczną architekturę opartą na strumieniowym przepływie danych. Apache Flume służy do gromadzenia danych logów obecnych w plikach logów z serwerów WWW i agregowania ich w celu… HDFS Do analizy.
Flume w Hadoop obsługuje wiele źródeł, w tym:
- „tail” (który przesyła dane z pliku lokalnego i zapisuje je do HDFS za pomocą Flume, podobnie do polecenia „tail” w systemie Unix)
- Dzienniki systemowe
- Log Apache4j (co umożliwia Java aplikacje do zapisywania zdarzeń do plików w HDFS poprzez Flume).
Obecna wersja to Flume 1.11.0, opublikowano 25 października 2022 r. i jest dostępne na stronie Strona pobierania Apache FlumeTen poradnik został napisany dla wersji 1.4.0, dlatego poniżej zamieszczono kilka wskazówek, w których bieżąca wersja zachowuje się inaczej.
Przepływ Architektura
Agent Flume to FMV Proces składający się z trzech komponentów – źródła Flume, kanału Flume i odbiornika Flume – przez które zdarzenia rozprzestrzeniają się po zainicjowaniu ich w źródle zewnętrznym. Poniższy diagram pokazuje, jak się one łączą.
- Zdarzenia generowane przez źródło zewnętrzne (serwer WWW) są przetwarzane przez źródło Flume. Źródło zewnętrzne wysyła zdarzenia do źródła Flume w formacie rozpoznawanym przez źródło docelowe.
- Źródło Flume odbiera zdarzenie i zapisuje je w jednym lub kilku kanałach. Kanał działa jak magazyn, który przechowuje zdarzenie do momentu jego wykorzystania przez odbiornik Flume. Kanał ten może wykorzystywać lokalny system plików do przechowywania tych zdarzeń.
- Odbiornik Flume usuwa zdarzenie z kanału i zapisuje je w zewnętrznym repozytorium, takim jak HDFS. Może istnieć wielu agentów Flume, w takim przypadku odbiornik Flume przekazuje zdarzenie do źródła Flume kolejnego agenta w przepływie.
Niektóre ważne cechy Flume
- Flume charakteryzuje się elastyczną konstrukcją opartą na strumieniowym przepływie danych. Jest odporny na błędy i solidny, z wieloma mechanizmami przełączania awaryjnego i odzyskiwania. Flume oferuje różne poziomy niezawodności, w tym: „dostawa z najwyższym wysiłkiem” oraz „dostawa od końca do końca”. Dostawa z najwyższą starannością nie toleruje żadnej awarii węzła Flume, podczas gdy dostawa od początku do końca gwarantuje dostawę nawet w przypadku awarii wielu węzłów.
- Flume przesyła dane między źródłami i odbiorcami. Gromadzenie danych może odbywać się w sposób zaplanowany lub sterowany zdarzeniami. Flume posiada własny moduł przetwarzania zapytań, który ułatwia transformację każdej nowej partii danych przed jej przeniesieniem do docelowego odbiorcy.
- Możliwy Flume tonie obejmują HDFS i HBaseFlume może również przesyłać dane o zdarzeniach, takie jak dane o ruchu sieciowym, dane generowane przez witryny mediów społecznościowych i wiadomości e-mail.
Konfiguracja Flume, biblioteki i kodu źródłowego
Zanim rozpoczniemy właściwy proces, upewnij się, że masz zainstalowany Hadoop; jeśli nie, przejrzyj jak zainstalować Hadoop Najpierw zmień użytkownika na „hduser” (identyfikator używany podczas konfiguracji Hadoop; możesz zmienić na identyfikator używany podczas własnej konfiguracji Hadoop).
Krok 1) Utwórz nowy katalog o nazwie „FlumeTutorial”.
sudo mkdir FlumeTutorial
- Udzielaj uprawnień do odczytu, zapisu i wykonywania.
sudo chmod -R 777 FlumeTutorial
- Skopiuj pliki Moje źródło Twittera.java oraz MójTwitterSourceForFlume.java do tego katalogu.
Sprawdź uprawnienia wszystkich plików, jak pokazano poniżej, i jeśli ich brakuje, przyznaj uprawnienie „odczyt”.
Krok 2) Pobierz „Apache Flume” z https://flume.apache.org/download.html.
W tym samouczku Flume użyto Apache Flume 1.4.0.
Następnie kliknij, aby przejść do lustra.
Krok 3) Skopiuj pobrany plik tarball do wybranego katalogu i wyeksportujtracPrzejrzyj zawartość za pomocą następującego polecenia.
sudo tar -xvf apache-flume-1.4.0-bin.tar.gz
Tworzy nowy katalog o nazwie apache-flume-1.4.0-bin i np.tracPrzenosi do niego pliki. Ten katalog jest nazywany w dalszej części artykułu.
Krok 4) Konfiguracja biblioteki Flume. Skopiuj pliki twitter4j-core-4.0.1.jar, flume-ng-configuration-1.4.0.jar, flume-ng-core-1.4.0.jar i flume-ng-sdk-1.4.0.jar do
/lib/
Jeden lub wszystkie skopiowane pliki JAR mogą mieć ustawione uprawnienia do wykonywania, co może powodować problemy z kompilacją kodu, dlatego należy je cofnąć. W moim przypadku plik twitter4j-core-4.0.1.jar miał uprawnienia do wykonywania. Cofnąłem je w następujący sposób.
sudo chmod -x twitter4j-core-4.0.1.jar
Następnie polecenie poniżej nadaje wszystkim uprawnienie do odczytu pliku twitter4j-core-4.0.1.jar.
sudo chmod +rrr /usr/local/apache-flume-1.4.0-bin/lib/twitter4j-core-4.0.1.jar
Proszę zwrócić uwagę, że pobrałem plik twitter4j-core-4.0.1.jar z Repozytorium Maveni wszystkie pliki JAR Flume, tj. flume-ng-*-1.4.0.jar, z artefakty org.apache.flume.
Załaduj dane z Twittera za pomocą Flume
Krok 1) Przejdź do katalogu zawierającego pliki kodu źródłowego.
Krok 2) Ustaw CLASSPATH tak, aby zawierał /lib/* i ~/FlumeTutorial/flume/mytwittersource/*.
export CLASSPATH="/usr/local/apache-flume-1.4.0-bin/lib/*:~/FlumeTutorial/flume/mytwittersource/*"
Krok 3) Skompiluj kod źródłowy za pomocą poniższego polecenia.
javac -d . MyTwitterSourceForFlume.java MyTwitterSource.java
Krok 4) Utwórz plik JAR. Najpierw utwórz plik Manifest.txt za pomocą dowolnego edytora tekstu i dodaj do niego poniższy wiersz.
Main-Class: flume.mytwittersource.MyTwitterSourceForFlume
Tutaj flume.mytwittersource.MyTwitterSourceForFlume to nazwa klasy głównej. Pamiętaj, że musisz nacisnąć klawisz Enter na końcu tego wiersza, jak pokazano poniżej.
Teraz utwórz plik JAR „MyTwitterSourceForFlume.jar” w następujący sposób.
jar cfm MyTwitterSourceForFlume.jar Manifest.txt flume/mytwittersource/*.class
Krok 5) Skopiuj ten plik JAR do /biblioteka/.
sudo cp MyTwitterSourceForFlume.jar <Flume Installation Directory>/lib/
Krok 6) Przejdź do katalogu konfiguracyjnego Flume, /konf.
Jeśli plik flume.conf nie istnieje, skopiuj plik flume-conf.properties.template i zmień jego nazwę na flume.conf.
sudo cp flume-conf.properties.template flume.conf
Jeśli plik flume-env.sh nie istnieje, skopiuj plik flume-env.sh.template i zmień jego nazwę na flume-env.sh.
sudo cp flume-env.sh.template flume-env.sh
Tworzenie aplikacji na Twitterze
Przeczytaj to najpierw. Transmisja strumieniowa v1.1 statuses/filter punkt końcowy, którego potrzebuje twitter4j 4.0.1, został wycofany 9 marca 2023 r., a filtrowany strumień API v2, który go zastąpił, jest teraz dostępny pod adresem developer.x.com, znajduje się za płatną wersją. Potraktuj poniższe ekrany jako niestandardowy wzorzec źródłowy, a następnie skieruj tego samego agenta na plik, plik wykonywalny lub źródło Kafki.
Krok 1) Utwórz aplikację Twitter, logując się do portalu dla programistów.
Krok 2) Przejdź do „Moich aplikacji” (opcja ta rozwija się po kliknięciu przycisku „Jajko” w prawym górnym rogu).
Krok 3) Utwórz nową aplikację klikając „Utwórz nową aplikację”.
Krok 4) Uzupełnij dane aplikacji, podając jej nazwę, opis i adres strony internetowej. Możesz skorzystać z uwag podanych pod każdym polem wprowadzania danych.
Krok 5) Przewiń stronę w dół, zaakceptuj warunki, zaznaczając „Tak, zgadzam się”, i kliknij przycisk „Utwórz aplikację na Twitterze”.
Krok 6) W oknie nowo utworzonej aplikacji przejdź do zakładki „Klucze API”, przewiń stronę w dół i kliknij przycisk „Utwórz mój token dostępu”.
Krok 7) Odśwież stronę.
Krok 8) Kliknij „Testuj OAuth”. Wyświetlą się ustawienia OAuth aplikacji.
Krok 9) Zmodyfikuj plik „flume.conf” za pomocą tych ustawień OAuth. Poniżej przedstawiono kroki modyfikacji pliku „flume.conf”.
Musimy skopiować klucz konsumenta, tajny klucz konsumenta, token dostępu i tajny token dostępu, aby zaktualizować plik „flume.conf”.
Uwaga: Wartości te należą do użytkownika i są poufne, dlatego nie należy ich udostępniać.
Zmodyfikuj plik „flume.conf”.
Krok 1) Otwórz „flume.conf” w trybie zapisu i ustaw wartości poniższych parametrów.
sudo gedit flume.conf
Skopiuj treść poniżej.
MyTwitAgent.sources = Twitter MyTwitAgent.channels = MemChannel MyTwitAgent.sinks = HDFS MyTwitAgent.sources.Twitter.type = flume.mytwittersource.MyTwitterSourceForFlume MyTwitAgent.sources.Twitter.channels = MemChannel MyTwitAgent.sources.Twitter.consumerKey = <Copy consumer key value from Twitter App> MyTwitAgent.sources.Twitter.consumerSecret = <Copy consumer secret value from Twitter App> MyTwitAgent.sources.Twitter.accessToken = <Copy access token value from Twitter App> MyTwitAgent.sources.Twitter.accessTokenSecret = <Copy access token secret value from Twitter App> MyTwitAgent.sources.Twitter.keywords = guru99 MyTwitAgent.sinks.HDFS.channel = MemChannel MyTwitAgent.sinks.HDFS.type = hdfs MyTwitAgent.sinks.HDFS.hdfs.path = hdfs://localhost:54310/user/hduser/flume/tweets/ MyTwitAgent.sinks.HDFS.hdfs.fileType = DataStream MyTwitAgent.sinks.HDFS.hdfs.writeFormat = Text MyTwitAgent.sinks.HDFS.hdfs.batchSize = 1000 MyTwitAgent.sinks.HDFS.hdfs.rollSize = 0 MyTwitAgent.sinks.HDFS.hdfs.rollCount = 10000 MyTwitAgent.channels.MemChannel.type = memory MyTwitAgent.channels.MemChannel.capacity = 10000 MyTwitAgent.channels.MemChannel.transactionCapacity = 1000
Krok 2) Ponadto ustaw TwitterAgent.sinks.HDFS.hdfs.path jak poniżej.
TwitterAgent.sinks.HDFS.hdfs.path = hdfs:// : / /flume/tweety/
Znaleźć , I , zobacz wartość parametru 'fs.defaultFS' ustawionego w $HADOOP_HOME/etc/hadoop/core-site.xml, pokazaną poniżej.
Krok 3) Aby móc przesyłać dane do systemu HDFS w miarę ich pojawiania się, usuń poniższy wpis, jeśli taki istnieje.
TwitterAgent.sinks.HDFS.hdfs.rollInterval = 600
Przykład: przesyłanie strumieniowe danych z Twittera za pomocą Flume
Krok 1) Otwórz „flume-env.sh” w trybie zapisu i ustaw wartości poniższych parametrów.
JAVA_HOME=<Installation directory of Java>
FLUME_CLASSPATH="<Flume Installation Directory>/lib/MyTwitterSourceForFlume.jar"
Krok 2) Uruchom Hadoop.
$HADOOP_HOME/sbin/start-dfs.sh
$HADOOP_HOME/sbin/start-yarn.sh
Krok 3) Dwa pliki JAR z archiwum tarball Flume nie są kompatybilne z Hadoop 2.2.0, dlatego w tym przykładzie Apache Flume wykonujemy poniższe kroki, aby zapewnić zgodność Flume z Hadoop 2.2.0. Ta zamiana plików JAR to poprawka z ery 1.4.0; Flume 1.11.0 zawiera już aktualne kompilacje protobuf i Guava, więc współczesne archiwum tarball zazwyczaj ich nie potrzebuje.
a. Przenieś protobuf-java-2.4.1.jar z ' /lib'. Przejdź najpierw do tego katalogu.
płyta CD /lib
sudo mv protobuf-java-2.4.1.jar ~/
b. Znajdź plik JAR „guava”, jak pokazano poniżej.
find . -name "guava*"
Przenieś guava-10.0.1.jar z ' /biblioteka'.
sudo mv guava-10.0.1.jar ~/
c. Pobierz guava-17.0.jar z Repozytorium Maven, pokazane poniżej.
Teraz skopiuj pobrany plik JAR do ' /biblioteka'.
Krok 4) Przejdź do ' /bin' i uruchom Flume w następujący sposób.
./flume-ng agent -n MyTwitAgent -c conf -f <Flume Installation Directory>/conf/flume.conf
Okno wiersza poleceń, z którego Flume pobiera tweety, wygląda następująco.
Z komunikatu w oknie poleceń wynika, że dane wyjściowe są zapisywane w katalogu /user/hduser/flume/tweets/. Teraz otwórz ten katalog za pomocą przeglądarki internetowej.
Krok 5) Aby zobaczyć wynik ładowania danych, otwórz http://localhost:50070/ w przeglądarce, przejrzyj system plików, a następnie przejdź do katalogu, do którego załadowano dane, czyli
/flume/tweety/
Port 50070 to internetowy interfejs użytkownika NameNode w Hadoop 2; Hadoop 3 przeniósł tę samą stronę na port 9870.
Flume jest połową spożycia: Łyżka importuje tabele w partiach, Flume przesyła strumieniowo zdarzenia, a następnie Świnia or Ul kształtować pliki i Oozie harmonogramuje łańcuch. Zobacz także narzędzia do analizy dużych zbiorów danych, MapReduce łączy i licznikuje oraz Taland.


































