Samouczek Apache Flume: Co to jest, Architecture i przykład Hadoopa
Co to jest Apache Flume w Hadoop?
Flume Apache'a jest niezawodnym i rozproszonym systemem do zbierania, agregowania i przenoszenia ogromnych ilości danych dziennika. Posiada prostą, ale elastyczną architekturę opartą na strumieniowych przepływach danych. Apache Flume służy do zbierania danych dziennika obecnych w plikach dziennika z serwerów internetowych i agregowania ich w HDFS w celu analizy.
Flume w Hadoop obsługuje wiele źródeł, takich jak –
- „tail” (który przesyła dane z pliku lokalnego i zapisuje je do HDFS za pośrednictwem Flume, podobnie do polecenia Uniksa „tail”)
- Dzienniki systemowe
- Log Apache4j (włączać Java aplikacje do zapisywania zdarzeń do plików w HDFS poprzez Flume).
Przepływ Architektura
A Środek Flumowy jest FMV proces składający się z 3 elementów –Źródło strumienia, Kanał Flume i Zlew Flume– przez którą rozchodzą się zdarzenia zainicjowane z zewnętrznego źródła.

- Na powyższym diagramie zdarzenia generowane przez źródło zewnętrzne (WebServer) są wykorzystywane przez źródło danych 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 większej liczbie kanałów. Kanał działa jak magazyn, w którym odbywa się wydarzenie, dopóki nie zostanie pochłonięte przez zlew korytowy. Ten kanał może używać lokalnego systemu plików do przechowywania tych zdarzeń.
- Flume Sink usuwa zdarzenie z kanału i przechowuje je w zewnętrznym repozytorium, takim jak np. HDFS. Może istnieć wiele czynników kanałowych, w którym to przypadku opadanie koryta przekazuje zdarzenie do źródła następnego środka kanałowego w strumieniu.
Niektóre ważne cechy FLUME
- Flume ma elastyczną konstrukcję opartą na strumieniowym przepływie danych. Jest odporny na awarie i solidny, z wieloma mechanizmami przełączania awaryjnego i odzyskiwania. Flume Big Data oferuje różne poziomy niezawodności, które obejmują „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, natomiast „dostawa od końca do końca” tryb gwarantuje dostawę nawet w przypadku awarii wielu węzłów.
- Flume przenosi dane między źródłami i pochłaniaczami. Gromadzenie danych może być zaplanowane lub sterowane zdarzeniami. Flume ma własny silnik przetwarzania zapytań, który ułatwia transformację każdej nowej partii danych przed przeniesieniem ich do zamierzonego ujścia.
- Możliwy Flume tonie zawierać HDFS i HBaseFlume Hadoop można również wykorzystać do przesyłania danych o zdarzeniach, w tym między innymi danych o ruchu sieciowym, danych generowanych przez witryny mediów społecznościowych i wiadomości e-mail.
Konfiguracja Flume, biblioteki i kodu źródłowego
Zanim zaczniemy właściwy proces, upewnij się, że masz zainstalowany Hadoop. Zmień użytkownika na „hduser” (identyfikator używany podczas konfiguracji Hadoop, możesz przełączyć się na identyfikator użytkownika używany podczas konfiguracji Hadoop)
Krok 1) Utwórz nowy katalog o nazwie „FlumeTutorial”
sudo mkdir FlumeTutorial
- Nadaj uprawnienia do odczytu, zapisu i wykonywania
sudo chmod -R 777 FlumeTutorial
- Skopiuj pliki Moje źródło Twittera.java i MójTwitterSourceForFlume.java w tym katalogu.
Sprawdź uprawnienia do wszystkich tych plików i jeśli brakuje uprawnień do odczytu, przyznaj je-
Krok 2) Pobierz „Apache Flume” ze strony- https://flume.apache.org/download.html
W tym samouczku Flume użyto Apache Flume 1.4.0.
Dalej kliknij
Krok 3) Skopiuj pobrany plik tarball do wybranego katalogu i rozpakuj jego zawartość, używając następującego polecenia
sudo tar -xvf apache-flume-1.4.0-bin.tar.gz
To polecenie utworzy nowy katalog o nazwie Apache-flume-1.4.0-bin i wypakuj do niego pliki. Katalog ten będzie nazywany w pozostałej części artykułu.
Krok 4) Konfiguracja biblioteki Flume
Skopiuj twitter4j-core-4.0.1.jar, flume-ng-configuration-1.4.0.jar, flume-ng-core-1.4.0.jar, flume-ng-sdk-1.4.0.jar do
/lib/
Możliwe, że jeden lub wszystkie skopiowane pliki JAR będą musiały wykonać uprawnienia. Może to powodować problemy z kompilacją kodu. Zatem cofnij uprawnienia do wykonywania takiego pliku JAR.
W moim przypadku, twitter4j-core-4.0.1.jar był konieczność wykonania pozwolenia. Odwołałem to jak poniżej-
sudo chmod -x twitter4j-core-4.0.1.jar
Po tym poleceniu daje uprawnienia do odczytu twitter4j-core-4.0.1.jar do wszystkich.
sudo chmod +rrr /usr/local/apache-flume-1.4.0-bin/lib/twitter4j-core-4.0.1.jar
Pamiętaj, że pobrałem-
– twitter4j-core-4.0.1.jar od https://mvnrepository.com/artifact/org.twitter4j/twitter4j-core
- Wszystkie płomieniowe słoiki, tj. flume-ng-*-1.4.0.jar od http://mvnrepository.com/artifact/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) Zestaw ŚCIEŻKA KLASY 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ą polecenia-
javac -d . MyTwitterSourceForFlume.java MyTwitterSource.java
Krok 4)Utwórz słoik
Najpierw utwórz Manifest.txt plik za pomocą wybranego edytora tekstu i dodaj w nim poniższą linię-
Main-Class: flume.mytwittersource.MyTwitterSourceForFlume
.. Tutaj flume.mytwittersource.MyTwitterSourceForFlume to nazwa klasy głównej. Pamiętaj, że musisz nacisnąć klawisz Enter na końcu tej linii.
Teraz utwórz plik JAR 'MójTwitterSourceForFlume.jar' jak-
jar cfm MyTwitterSourceForFlume.jar Manifest.txt flume/mytwittersource/*.class
Krok 5) Skopiuj ten słoik do /lib/
sudo cp MyTwitterSourceForFlume.jar <Flume Installation Directory>/lib/
Krok 6) Przejdź do katalogu konfiguracyjnego Flume, /konf
Jeśli plik flume.conf nie istnieje, skopiuj flume-conf.properties.template i zmień jego nazwę na flume.conf
sudo cp flume-conf.properties.template flume.conf
If flume-env.sh nie istnieje, to skopiuj 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
Krok 1) Utwórz aplikację na Twitterze, logując się do https://developer.twitter.com/
Krok 2) Iść do 'Moje aplikacje' (Ta opcja zostanie usunięta, gdy 'Jajko' kliknięto przycisk w prawym górnym rogu)
Krok 3) Utwórz nową aplikację klikając „Utwórz nową aplikację”
Krok 4) Wypełnij szczegóły aplikacji, podając nazwę aplikacji, opis i stronę internetową. Możesz zapoznać się z notatkami podanymi pod każdym polem wprowadzania.
Krok 5) Przewiń stronę w dół i zaakceptuj regulamin zaznaczając 'Tak, zgadzam się' i kliknij przycisk„Utwórz swoją 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 na „Przetestuj OAuth”. To się wyświetli „OAuth” ustawienia aplikacji.
Krok 9) modyfikować „flume.conf” używając tych Ustawienia OAuth. Kroki do modyfikacji „flume.conf” podano poniżej.
Musimy skopiować klucz konsumenta, sekret konsumenta, token dostępu i sekret tokena dostępu, aby zaktualizować plik „flume.conf”.
Uwaga: te wartości należą do użytkownika i dlatego są poufne, dlatego nie należy ich udostępniać.
Zmodyfikuj plik „flume.conf”.
Krok 1) Otwarte „flume.conf” w trybie zapisu i ustaw wartości dla poniższych parametrów-
sudo gedit flume.conf
Skopiuj poniższą zawartość-
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) Także ustaw TwitterAgent.sinks.HDFS.hdfs.path jak poniżej,
TwitterAgent.sinks.HDFS.hdfs.path = hdfs:// : / /flume/tweety/
Wiedzieć , i , zobacz wartość parametru „fs.defaultFS” ustalać się $HADOOP_HOME/etc/hadoop/core-site.xml
Krok 3) Aby opróżnić dane do HDFS, usuń poniższy wpis, jeśli istnieje,
TwitterAgent.sinks.HDFS.hdfs.rollInterval = 600
Przykład: przesyłanie strumieniowe danych z Twittera za pomocą Flume
Krok 1) Otwarte „flume-env.sh” w trybie zapisu i ustaw wartości dla poniższych parametrów,
JAVA_HOME=<Installation directory of Java>
FLUME_CLASSPATH="<Flume Installation Directory>/lib/MyTwitterSourceForFlume.jar"
Krok 2) Uruchom Hadoopa
$HADOOP_HOME/sbin/start-dfs.sh
$HADOOP_HOME/sbin/start-yarn.sh
Krok 3) Dwa z plików JAR z archiwum Flume nie są kompatybilne z Hadoop 2.2.0. Dlatego będziemy musieli wykonać poniższe kroki w tym przykładzie Apache Flume, aby Flume był kompatybilny z Hadoop 2.2.0.
a. Przenieść protobuf-Java-2.4.1.jar na ' /lib”.
Iść do ' /lib'
płyta CD /lib
sudo mv protobuf-java-2.4.1.jar ~/
b. Znajdź plik JAR „guava”, jak poniżej
find . -name "guava*"
Przenieść guawa-10.0.1.jar na ' /lib”.
sudo mv guava-10.0.1.jar ~/
c. Do pobrania guawa-17.0.jar od http://mvnrepository.com/artifact/com.google.guava/guava/17.0
Teraz skopiuj pobrany plik jar do ' /lib'
Krok 4) Iść do ' /kosz' i uruchom Flume jako-
./flume-ng agent -n MyTwitAgent -c conf -f <Flume Installation Directory>/conf/flume.conf
Okno wiersza poleceń, w którym kanał pobiera tweety-
Z komunikatu okna poleceń możemy zobaczyć, że dane wyjściowe są zapisywane /user/hduser/flume/tweets/ katalogiem.
Teraz otwórz ten katalog za pomocą przeglądarki internetowej.
Krok 5) Aby zobaczyć wynik ładowania danych, użyj otwartej przeglądarki http://localhost:50070/ i przeglądaj system plików, a następnie przejdź do katalogu, w którym zostały załadowane dane, czyli-
/flume/tweety/