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.

Przepływ Architektura
Przepływ Architektura
  1. 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.
  2. Ź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ń.
  3. 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)

Konfiguracja Flume, biblioteki i kodu źródłowego

Krok 1) Utwórz nowy katalog o nazwie „FlumeTutorial”

sudo mkdir FlumeTutorial
  1. Nadaj uprawnienia do odczytu, zapisu i wykonywania
    sudo chmod -R 777 FlumeTutorial
  2. Skopiuj pliki Moje źródło Twittera.java i MójTwitterSourceForFlume.java w tym katalogu.

Pobierz stąd pliki wejściowe

Sprawdź uprawnienia do wszystkich tych plików i jeśli brakuje uprawnień do odczytu, przyznaj je-

Konfiguracja Flume, biblioteki i kodu źródłowego

Krok 2) Pobierz „Apache Flume” ze strony- https://flume.apache.org/download.html

W tym samouczku Flume użyto Apache Flume 1.4.0.

Konfiguracja Flume, biblioteki i kodu źródłowego

Dalej kliknij

Konfiguracja Flume, biblioteki i kodu źródłowego

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

Konfiguracja Flume, biblioteki i kodu źródłowego

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

Konfiguracja Flume, biblioteki i kodu źródłowego

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/*"

Załaduj dane z Twittera za pomocą Flume

Krok 3) Skompiluj kod źródłowy za pomocą polecenia-

javac -d . MyTwitterSourceForFlume.java MyTwitterSource.java

Załaduj dane z Twittera za pomocą Flume

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.

Załaduj dane z Twittera za pomocą Flume

Teraz utwórz plik JAR 'MójTwitterSourceForFlume.jar' jak-

jar cfm MyTwitterSourceForFlume.jar Manifest.txt flume/mytwittersource/*.class

Załaduj dane z Twittera za pomocą Flume

Krok 5) Skopiuj ten słoik do /lib/

sudo cp MyTwitterSourceForFlume.jar <Flume Installation Directory>/lib/

Załaduj dane z Twittera za pomocą Flume

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

Załaduj dane z Twittera za pomocą Flume

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

Załaduj dane z Twittera za pomocą Flume

Tworzenie aplikacji na Twitterze

Krok 1) Utwórz aplikację na Twitterze, logując się do https://developer.twitter.com/

Tworzenie aplikacji na Twitterze

Tworzenie aplikacji na Twitterze

Krok 2) Iść do 'Moje aplikacje' (Ta opcja zostanie usunięta, gdy 'Jajko' kliknięto przycisk w prawym górnym rogu)

Tworzenie aplikacji na Twitterze

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.

Tworzenie aplikacji na Twitterze

Krok 5) Przewiń stronę w dół i zaakceptuj regulamin zaznaczając 'Tak, zgadzam się' i kliknij przycisk„Utwórz swoją aplikację na Twitterze”

Tworzenie aplikacji 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”

Tworzenie aplikacji na Twitterze

Tworzenie aplikacji na Twitterze

Krok 7) Odśwież stronę.

Krok 8) Kliknij na „Przetestuj OAuth”. To się wyświetli „OAuth” ustawienia aplikacji.

Tworzenie aplikacji na Twitterze

Krok 9) modyfikować „flume.conf” używając tych Ustawienia OAuth. Kroki do modyfikacji „flume.conf” podano poniżej.

Tworzenie aplikacji na Twitterze

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

Zmodyfikuj plik „Flume.conf”.

Krok 2) Także ustaw TwitterAgent.sinks.HDFS.hdfs.path jak poniżej,

TwitterAgent.sinks.HDFS.hdfs.path = hdfs:// : / /flume/tweety/

Zmodyfikuj plik „Flume.conf”.

Wiedzieć , i , zobacz wartość parametru „fs.defaultFS” ustalać się $HADOOP_HOME/etc/hadoop/core-site.xml

Zmodyfikuj plik „Flume.conf”.

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"

Przesyłanie strumieniowe danych z Twittera za pomocą Flume

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 ~/

Przesyłanie strumieniowe danych z Twittera za pomocą Flume

b. Znajdź plik JAR „guava”, jak poniżej

find . -name "guava*"

Przesyłanie strumieniowe danych z Twittera za pomocą Flume

Przenieść guawa-10.0.1.jar na ' /lib”.

sudo mv guava-10.0.1.jar ~/

Przesyłanie strumieniowe danych z Twittera za pomocą Flume

c. Do pobrania guawa-17.0.jar od http://mvnrepository.com/artifact/com.google.guava/guava/17.0

Przesyłanie strumieniowe danych z Twittera za pomocą Flume

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

Przesyłanie strumieniowe danych z Twittera za pomocą Flume

Okno wiersza poleceń, w którym kanał pobiera tweety-

Przesyłanie strumieniowe danych z Twittera za pomocą Flume

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/

Przesyłanie strumieniowe danych z Twittera za pomocą Flume